This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #123788] tests for making in in-use @ISA not an @ISA anymore
authorTony Cook <tony@develop-help.com>
Thu, 5 Mar 2015 04:17:41 +0000 (15:17 +1100)
committerTony Cook <tony@develop-help.com>
Mon, 11 Jan 2016 00:43:45 +0000 (11:43 +1100)
t/mro/basic.t

index 3b7f9e8..a037781 100644 (file)
@@ -9,7 +9,7 @@ BEGIN {
 use strict;
 use warnings;
 
-plan(tests => 61);
+plan(tests => 64);
 
 require mro;
 
@@ -396,3 +396,41 @@ undef *UNIVERSAL::DESTROY;
     $#_119433::ISA++;
     pass "no crash when ISA contains nonexistent elements";
 }
+
+{ # 123788
+    local $::TODO = "crashes";
+    fresh_perl_is(<<'PROG', "ok", {}, "don't crash when deleting ISA");
+$x = \@{q(Foo::ISA)};
+delete $Foo::{ISA};
+@$x = "Bar";
+print "ok\n";
+PROG
+
+    # when there are multiple references to an ISA array, the mg_obj
+    # turns into an AV of globs, which is a different code path
+    # this test only crashes on -DDEBUGGING builds
+    fresh_perl_is(<<'PROG', "ok", {}, "a case with multiple refs to ISA");
+@Foo::ISA = qw(Abc Def);
+$x = \@{q(Foo::ISA)};
+*Bar::ISA = $x;
+delete $Bar::{ISA};
+delete $Foo::{ISA};
+++$y;
+$x->[1] = "Ghi";
+@$x = "Bar";
+print "ok\n";
+PROG
+
+    # reverse order of delete to exercise removing from the other end
+    # of the array
+    # again, may only crash on -DDEBUGGING builds
+    fresh_perl_is(<<'PROG', "ok", {}, "a case with multiple refs to ISA");
+$x = \@{q(Foo::ISA)};
+*Bar::ISA = $x;
+delete $Foo::{ISA};
+delete $Bar::{ISA};
+++$y;
+@$x = "Bar";
+print "ok\n";
+PROG
+}