diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2000-06-08 13:57:54 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2000-06-08 13:57:54 +0000 |
commit | ecf8e9dde37ff8f382bf4756913bb8ab7f0dba8c (patch) | |
tree | 990b958833a962d79c78db7c4b3e4d85df5d441e | |
parent | 8e0cb907c457a6fc499eff7d36eb9f043a570fc1 (diff) | |
download | perl-ecf8e9dde37ff8f382bf4756913bb8ab7f0dba8c.tar.gz |
@_ can't have junk in it even in the non-USE_ITHREADS case because
caller() wants to populate @DB::args with it (causes a coredump
in Carp::confess())
p4raw-id: //depot/perl@6214
-rw-r--r-- | cop.h | 10 | ||||
-rwxr-xr-x | t/op/runlevel.t | 15 |
2 files changed, 18 insertions, 7 deletions
@@ -106,13 +106,9 @@ struct block_sub { } STMT_END #endif /* USE_THREADS */ -#ifdef USE_ITHREADS - /* junk in @_ spells trouble when cloning CVs, so don't leave any */ -# define CLEAR_ARGARRAY() av_clear(cx->blk_sub.argarray) -#else -# define CLEAR_ARGARRAY() NOOP -#endif /* USE_ITHREADS */ - +/* junk in @_ spells trouble when cloning CVs and in pp_caller(), so don't + * leave any */ +#define CLEAR_ARGARRAY() av_clear(cx->blk_sub.argarray) #define POPSUB(cx,sv) \ STMT_START { \ diff --git a/t/op/runlevel.t b/t/op/runlevel.t index e988ad9362..3865e52070 100755 --- a/t/op/runlevel.t +++ b/t/op/runlevel.t @@ -349,3 +349,18 @@ A 1 bar B 2 bar +######## +sub n { 0 } +sub f { my $x = shift; d(); } +f(n()); +f(); + +sub d { + my $i = 0; my @a; + while (do { { package DB; @a = caller($i++) } } ) { + @a = @DB::args; + for (@a) { print "$_\n"; $_ = '' } + } +} +EXPECT +0 |