Stop creating defelems for undef in foreach(@_)
authorFather Chrysostomos <sprout@cpan.org>
Thu, 29 Aug 2013 01:20:41 +0000 (18:20 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 29 Aug 2013 05:26:14 +0000 (22:26 -0700)
commita600f7e6b3c2fb66bd73b5e0893bfe1a09f26db7
tree40f9628fdb5822cec9882db4df2e62f993477a55
parent28f52e64fb57fb6fc7c270491c57260903a3ace3
Stop creating defelems for undef in foreach(@_)

This is part of ticket #119433.  This particular bug is triggered by
Data::Dump’s test suite.

Commit ce0d59f changed arrays to use NULL for nonexistent elements,
instead of &PL_sv_undef (the special scalar returned by Perl’s ‘undef’
operator).

‘foreach’ was not updated to account.  It was still treating
&PL_sv_undef as a nonexistent element.  This was causing ‘Modifica-
tion of non-creatable array value attempted, subscript 0’, due to a
similar bug in vivify_defelem, which the next commit will fix.

(Fixing vivify_defelem without fixing foreach will make the test pass,
but for foreach to create a defelem to begin with is inefficient and
should be addressed anyway.)
pp_hot.c
t/op/for.t