On Mon, May 2, 2011 at 4:35 PM, Michael Matz <m...@suse.de> wrote:
> Hi,
>
> On Mon, 2 May 2011, Jan Hubicka wrote:
>
>> !   d_entry.base.from = t;
>> !   slot = htab_find_slot (cache->node_map, &d_entry, INSERT);
>> !   if (*slot == NULL)
>>       {
>>         /* Determine the next slot to use in the cache.  */
>>         if (insert_at_next_slot_p)
>>       ix = VEC_length (tree, cache->nodes);
>>         else
>>       ix = *ix_p;
>> !
>> !       entry = (struct tree_int_map *)pool_alloc (cache->node_map_entries);
>> !       entry->base.from = t;
>> !       entry->to = ix;
>> !       *slot = entry;
>>
>>         lto_streamer_cache_add_to_node_array (cache, ix, t);
>>
>> --- 348,367 ----
>>                            bool insert_at_next_slot_p)
>>   {
>>     void **slot;
>>     unsigned ix;
>>     bool existed_p;
>>
>>     gcc_assert (t);
>>
>> !   slot = pointer_map_insert (cache->node_map, t);
>> !   if (!*slot)
>
> ix might legitimately be zero.  Hence this transformation is not
> equivalent.  You might want to enter ix+1 into the cache with the
> appropriate adjustment at read-out.  Same for the other places.

Or not use index zero.  Maybe better than also have to deal
with ix + 1 wrapping ...

Richard.

>
> Ciao,
> Michael.
>

Reply via email to