This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
improve debugging of padlist API
authorDaniel Dragan <bulk88@hotmail.com>
Thu, 2 Jul 2015 21:15:19 +0000 (17:15 -0400)
committerTony Cook <tony@develop-help.com>
Thu, 9 Jul 2015 01:04:48 +0000 (11:04 +1000)
commit30dc90f1923c08aae65b60f713ac12490a716e10
treedcbebe87a5c700ff1ce7c28e22a7491375dd02c1
parent779c45cea2b7a1f170504381f3de6b4ba0d8e7ee
improve debugging of padlist API

xpadl_alloc should really be pointer to a struct with a flexible array
member, but flexible array members aren't portable enough among CCs. While
debugging the padlist API for memory corruption (caused by an unrelated
XS module), I saw that the pointer in the first slice of xpadl_alloc
pointed to an AV head of gibberish but 2nd slice was fine. This was
confusing and led me to belive the memory corruption was a bad write to
the array in xpadl_alloc. PadlistARRAY's POD a couple pages down mentions
that index 0 is not an AV *, but the struct comments just said
"pointer to beginning of array of AVs " and didnt mention index 0.

Fix the comments to make it clear what xpadl_alloc is. Add a union so it
is easier to analyze a crash dump/breakpoint with a C debugger, without
writing new code "PADNAMELIST * pnl =  PadlistNAMES(pl);" in many places
and recompiling the interp with -O0, just to be able to inspect the
padnamelist struct.
pad.h