[perl #46179] [TODO] Remove GC code depending upon -D40 before parrot 1.0
Andy Dougherty
doughera at lafayette.edu
Mon Feb 2 17:56:24 UTC 2009
On Mon, 2 Feb 2009, Andrew Whitworth via RT wrote:
> On Sat Oct 06 05:46:09 2007, pcoch wrote:
> > In src/gc/register.c:clear_regs() there is the todo item:
> >
> > /* depending on -D40 we set int, num to garbage different garbage
> > * TODO remove this code for parrot 1.0
>
> We do want to remove the current code from clear_regs(), but what do we
> want to change it to? The PMC and STRING registers obviously need to be
> nulled out for GC to avoid false positives. Do we need to clear the
> values of the INT and NUM registers too? If so, what values do we want
> them to have? Should we still use special flag values for -D40?
There's a bit more history of this in [perl #38978] and [perl #39244] (and
some other old tickets too, but those are enough to give the idea). The
problem was that, on some compilers in some situations, the I and N
registered ended up as 0 even if they weren't explicitly initialized, and
various bits in the test suite worked accidentally because of that. (There
used to be conditional compilation mixed in there as well, just to make it
even more confusing.)
Such bugs have long since been eradicated in the test suite, and nothing
developed in the past couple of years could rely on accidental
initialization.
None of which answers your question. The original intent was that the
registers are not to be initialized, which would mean deleting the second
branch (with the 888's) but leaving the -D40 branch as a possible
debugging tool.
--
Andy Dougherty doughera at lafayette.edu
More information about the parrot-dev
mailing list