https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85302

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |jakub at gcc dot gnu.org

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Ugh, this is a mess, there is a circular dependency.
index_location_lists adds addr_table entries, so we need to assign indexes for
the addr_table after index_location_lists is done - note, we can't easily index
them first and just add indexes for the new entries that aren't indexed yet
afterwards, because the way the addr_table is then emitted relies on the hash
table being imutable after the indexes have been assigned and asserts the
indexes match what we traverse.
And index_location_lists on the other side calls skip_loc_list_entry which
computes the size of location list and for that it needs the addr_table indexes
being computed.

I guess the easiest fix would be to make sure we don't consider size_of_locs
during index_location_lists and when outputting the location list, if we find
we want to skip a loc_list_entry despite it having a begin_entry assigned, we
just force the label for it.

Reply via email to