This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
handle SvIMMORTALs in LHS of list assign
authorDavid Mitchell <davem@iabyn.com>
Tue, 8 Nov 2016 12:26:12 +0000 (12:26 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 9 Nov 2016 09:05:30 +0000 (09:05 +0000)
commit94a5f6597322b09798789257ed58175d9e7462a7
treea9631ef154fde19389f49b19088fc2e35748431b
parent6645d2ed454fabd284e37e08a29cacbfc5b9a3d6
handle SvIMMORTALs in LHS of list assign

RT #129991: this code fails an assert that the LHS is not SvIMMORTAL:

    perl -e  '($_,$0)=(1,0) for 0 gt 0'

The 'set SVf_BREAK flag in a mark and sweep' code I wrote to look for
common elements, skips PL_sv_undef on the LHS. It should also skip
other SvIMMORTAL SVs like PL_sv_yes, but the SvIMMORTAL() test is
more expensive than a simple (sv == &PL_sv_undef), and I couldn't think of
a case where a LHS would be immortal but not sv_undef.

So I added an assert instead.

The above code shows that it was in fact possible, so test for SvIMMORTAL
instead.
pp_hot.c
t/op/aassign.t