This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In Perl_gp_free() use PL_tmps_stack to avoid freeing glob entries immediately.
[perl5.git] / t / op / gv.t
index 4136ca2..9e2ce52 100644 (file)
--- a/t/op/gv.t
+++ b/t/op/gv.t
@@ -12,8 +12,6 @@ BEGIN {
 
 use warnings;
 
-plan(tests => 284);
-
 # type coercion on assignment
 $foo = 'foo';
 $bar = *main::foo;
@@ -317,6 +315,9 @@ is($j[0], 1);
 {
     # Need some sort of die or warn to get the global destruction text if the
     # bug is still present
+    # This test is "interesting" because the cleanup is triggered by the call
+    # op_free(PL_main_root) in perl_destruct, which is *just* before this:
+    # PERL_SET_PHASE(PERL_PHASE_DESTRUCT);
     my $output = runperl(prog => <<'EOPROG');
 package M;
 $| = 1;
@@ -1225,6 +1226,18 @@ eval << '--';
 --
 like $@, qr /^Use of inherited AUTOLOAD for non-method main::f\x{1543}\x{18c}\(\) is no longer allowed/, "Cannot inherit AUTOLOAD";
 
+# ASAN used to get very excited about this:
+runperl(prog => '$a += (*a = 2)');
+is ($?, 0,
+    "work around lack of stack reference counting during typeglob assignment");
+
+# and this
+runperl(prog => '$$ |= (*$ = $$)');
+is ($?, 0,
+    "work around lack of stack reference counting during typeglob assignment");
+
+done_testing();
+
 __END__
 Perl
 Rules