On Wed, Oct 12, 2011 at 10:29 AM, Eric Botcazou <ebotca...@adacore.com> wrote:
>> It maps a type node into a corresponding integer node that is
>> the "blocking factor" associated with the type node.  Before
>> the advent of this hash table the blocking factor was stored
>> in a dedicated field in the tree type node.  The suggestion was
>> made to move this into a hash table to save space.  I chose
>> the "tree map" hash table because I thought it could do the job.
>
> So this isn't a simple hash table since this is a map.  A simple hash table
> doesn't store the key in the slot, only the value; a map does.
>
>> The keys are valid.  In the example discussed in this thread,
>> there is a pointer to type node that used in a parameter declaration
>> of a function prototype and also in the similarly named parameter
>> of the function definition.  Both tree pointers are used as keys,
>> and they are "live" at the point that the GC runs.
>
> But somehow they aren't marked by the GC.  You need to find out why, since the
> value will be kept only if the key is already marked by the GC.
>
> By the time a GC pass is run, all trees to be kept must be linked to a GC 
> root.
> You said that the pass was run "between the point that the function prototype
> tree node was created and the point at which the function declaration was
> processed".  To which GC root are the keys linked between these points?

I think there is an issue when two cache htabs refer to each other
with respect to GC, you might search the list to find out more.

Richard.

> --
> Eric Botcazou
>

Reply via email to