Don't follow CvSTART() if CvROOT() is NULL.
authorZefram <zefram@fysh.org>
Fri, 10 May 2013 07:09:58 +0000 (09:09 +0200)
committerNicholas Clark <nick@ccl4.org>
Fri, 10 May 2013 07:19:54 +0000 (09:19 +0200)
commitcd50b0d77d60aae0711ec4b6e55f0f706a8d4e41
tree9c11030c7d633ee8fdc935b63c11ab4b9564ebca
parent8633d8a5ccf5530b1a85d195dcf0cd5d74927ff7
Don't follow CvSTART() if CvROOT() is NULL.

For v5.17.2, blead switched to a slab allocator for OPs. During subroutine
compilation, the CV's slab is held in CvSTART(), to avoid extending every
PVCV by one more pointer. Once compilation is complete, the optree slab
pointer becomes accessible at an offset from CvROOT(), and CvSTART() is
set to point to the first OP. However, in some cases, PVCVs in the incomplete
state can become visible to Devel::Size, for example by following the
CvOUTSIDE() from BEGIN blocks. So we need to ignore CvSTART() if CvROOT() is
NULL. (Arguably we should always ignore CvSTART(), as the OP that it points to
should be accessible somewhere in the tree referenced by CvROOT(), but that
change can wait for a later date)

(see RT #83903 and perl's commit 8be227ab5eaa23f2)
CHANGES
Size.xs