Control: tag -1 patch Control: forwarded -1 https://rt.cpan.org/Public/Bug/Display.html?id=110623
On Fri, Dec 25, 2015 at 11:00:18AM +0200, Niko Tyni wrote: > use Devel::CallParser; > > sub f { > my $arg = shift; > > { my $arg; } # ??? > print $arg ? "ok\n" : "not ok\n"; > } > > f(1); > > which gives "ok" on 5.20 and "not ok" on 5.22. Patch attached, sent upstream in https://rt.cpan.org/Public/Bug/Display.html?id=110623 Will upload shortly. -- Niko Tyni nt...@debian.org
>From ba92f4cba247c91d100e05f2b83dd093055e462b Mon Sep 17 00:00:00 2001 From: Niko Tyni <nt...@debian.org> Date: Fri, 25 Dec 2015 18:53:08 +0200 Subject: [PATCH] Fix a pad problem with Perl >= 5.21.4 on threaded builds This broke at least the Kavorka and Moops distributions. Bug-Debian: https://bugs.debian.org/808826 Bug: https://rt.cpan.org/Public/Bug/Display.html?id=110623 --- lib/Devel/CallParser.xs | 10 +++++++--- t/pad2.t | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 t/pad2.t diff --git a/lib/Devel/CallParser.xs b/lib/Devel/CallParser.xs index 6643739..847742c 100644 --- a/lib/Devel/CallParser.xs +++ b/lib/Devel/CallParser.xs @@ -323,10 +323,14 @@ static int my_keyword_plugin(pTHX_ * The core bug was supposedly fixed in Perl 5.19.4, but actually * that version exhibits a different bug also apparently related * to padrange. Restoring the pad's fill pointer works around - * this bug too. So for now this workaround is used with no - * upper bound on the Perl version. + * this bug too. + * + * The other padrange bug was fixed in Perl 5.19.5 (commit aa033da), + * so the workaround is no longer needed after that, but it remains + * harmless until v5.21.4 (commit c9859fb) where it starts breaking + * (see t/pad2.t.) */ -#define MUST_RESTORE_PAD_FILL PERL_VERSION_GE(5,17,6) +#define MUST_RESTORE_PAD_FILL PERL_VERSION_GE(5,17,6) && ! PERL_VERSION_GE(5,19,5) #if MUST_RESTORE_PAD_FILL I32 padfill = av_len(PL_comppad); #endif /* MUST_RESTORE_PAD_FILL */ diff --git a/t/pad2.t b/t/pad2.t new file mode 100644 index 0000000..92c6dab --- /dev/null +++ b/t/pad2.t @@ -0,0 +1,15 @@ +use warnings; +use strict; + +use Test::More tests => 1; + +use Devel::CallParser; + +sub f { + my $arg = shift; + + { my $arg; } # ??? + ok($arg, '$arg stays set after a "my $arg" block'); +} + +f(1); -- 2.6.4