issue71.t 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 < 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 < 1.35
  44. ? "TODO B:C reg_temp_copy from invalid r->offs"
  45. : ($]>5.008004 and $]<5.008009?'':"TODO ")
  46. ."alias reg_temp_copy failed: Unknown encoding 'UTF-8'");
  47. my $DEBUGGING = ($Config{ccflags} =~ m/-DDEBUGGING/);
  48. SKIP: {
  49. skip "hangs", 1 if !$DEBUGGING;
  50. use B::CC;
  51. ctestok(3, "CC", "ccode71i", $script,
  52. $B::CC::VERSION < 1.13
  53. ? "TODO Encode::decode croak: Assertion failed: (SvTYPE(TARG) == SVt_PVHV), function Perl_pp_padhv"
  54. : undef);
  55. }