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.