issue71.t 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #! /usr/bin/env perl
  2. # http://code.google.com/p/perl-compiler/issues/detail?id=71
  3. # Encode::decode fails in multiple ways. 1 with B::REGEXP refs unattached to PMOPs
  4. use Test::More tests => 3;
  5. use strict;
  6. BEGIN {
  7. unshift @INC, 't';
  8. require "test.pl";
  9. }
  10. # Simplification of Encode::Alias to test SvANY(REGEXP)=SvANY(CALLREGCOMP)
  11. # e.g. Encode::Alias define_alias( qr/^(.*)$/ => '"\L$1"' ) creates REGEXP refs without PMOP's.
  12. my $script = <<'EOF';
  13. package my;
  14. our @a;
  15. sub f {
  16. my($alias,$name)=@_;
  17. unshift(@a, $alias => $name);
  18. my $find = "ok";
  19. my $val = $a[1];
  20. if ( ref($alias) eq 'Regexp' && $find =~ $alias ) {
  21. eval $val;
  22. }
  23. $find
  24. }
  25. package main;
  26. *f=*my::f;
  27. print "ok" if f(qr/^(.*)$/ => '"\L$1"');
  28. EOF
  29. use B::C;
  30. ctestok(1, "C", "ccode71i", $script,
  31. ($B::C::VERSION lt '1.35' ? "TODO " : ""). "SvANY(REGEXP)=SvANY(CALLREGCOMP)"
  32. );
  33. $script = <<'EOF';
  34. use Encode;
  35. my $x = 'abc';
  36. print "ok" if 'abc' eq Encode::decode('UTF-8', $x);
  37. EOF
  38. # These 2 tests failed until 1.35 because of stale QR Regexp (see test 1),
  39. # issue71 (const destruction) and issue76 (invalid cop_warnings).
  40. # rx: (?^i:^(?:US-?)ascii$)"
  41. use B::C;
  42. ctestok(2, "C", "ccode71i", $script,
  43. $B::C::VERSION lt '1.35'
  44. ? "TODO B:C reg_temp_copy from invalid r->offs"
  45. : "alias reg_temp_copy failed: Unknown encoding 'UTF-8'");
  46. my $DEBUGGING = ($Config{ccflags} =~ m/-DDEBUGGING/);
  47. SKIP: {
  48. skip "hangs", 1 if !$DEBUGGING;
  49. #use B::CC;
  50. ctestok(3, "CC", "ccode71i", $script,
  51. $B::C::VERSION lt '1.42_57'
  52. ? "TODO Encode::decode croak: Assertion failed: (SvTYPE(TARG) == SVt_PVHV), function Perl_pp_padhv"
  53. : undef);
  54. }