http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53021
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2012-04-17 19:57:44 UTC --- unique_base_value calls gen_rtx_ADDRESS which overrides dwarf_file_data created by lookup_filename in dwarf2out.c: /* Check to see if the file name that was searched on the previous call matches this file name. If so, return the index. */ if (file_table_last_lookup && (file_name == file_table_last_lookup->filename || filename_cmp (file_table_last_lookup->filename, file_name) == 0)) return file_table_last_lookup; /* Didn't match the previous lookup, search the table. */ slot = htab_find_slot_with_hash (file_table, file_name, htab_hash_string (file_name), INSERT); if (*slot) return (struct dwarf_file_data *) *slot; created = ggc_alloc_dwarf_file_data (); created->filename = file_name; created->emitted_number = 0; *slot = created; return created; However, return of htab_find_slot_with_hash wasn't marked with GTY(()) and file_table_last_lookup was never set.