https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90232
Bug ID: 90232 Summary: gcc drops top-level dies with -fdebug-types-section Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: vries at gcc dot gnu.org Target Milestone: --- [ Spinoff bug from gdb PR https://sourceware.org/bugzilla/show_bug.cgi?id=14148#c3 ] Consider two-file test-case 36: ... $ cat 36.c struct s { int i; }; extern void f (void); int main (void) { struct s a; f (); return 0; } $ cat 36b.c struct s { int j; }; void f (void) { struct s b; } ... Compiled like this: ... $ gcc -fdebug-types-section -o 36 36.c 36b.c -Wall -g ... Without -fdebug-types-section, for 36.c we have the struct type s as top-level die, and as type of main variable a: ... <0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit) <d8> DW_AT_name : (indirect string, offset: 0x1f8): 36.c <1><f4>: Abbrev Number: 2 (DW_TAG_structure_type) <f5> DW_AT_name : s <1><112>: Abbrev Number: 5 (DW_TAG_subprogram) <113> DW_AT_name : (indirect string, offset: 0x1fd): main <2><130>: Abbrev Number: 6 (DW_TAG_variable) <131> DW_AT_name : a <136> DW_AT_type : <0xf4> ... with the same pattern for 36b.c: ... <0><14a>: Abbrev Number: 1 (DW_TAG_compile_unit) <150> DW_AT_name : (indirect string, offset: 0x261): 36b.c <1><16c>: Abbrev Number: 2 (DW_TAG_structure_type) <16d> DW_AT_name : s <1><18a>: Abbrev Number: 5 (DW_TAG_subprogram) <18b> DW_AT_name : f <2><1a2>: Abbrev Number: 6 (DW_TAG_variable) <1a3> DW_AT_name : b <1a8> DW_AT_type : <0x16c> ... With -fdebug-types-section, we have struct s in .debug_types with only a reference from the variable for 36.c: ... <1><fb>: Abbrev Number: 6 (DW_TAG_subprogram) <fc> DW_AT_name : (indirect string, offset: 0x272): main <2><119>: Abbrev Number: 7 (DW_TAG_variable) <11a> DW_AT_name : a <11f> DW_AT_type : signature: 0xfd1462823bb6f7b7 Contents of the .debug_types section: Signature: 0xfd1462823bb6f7b7 <1><1d>: Abbrev Number: 2 (DW_TAG_structure_type) <1e> DW_AT_name : s ... and the same for 36b.c: ... <1><160>: Abbrev Number: 6 (DW_TAG_subprogram) <161> DW_AT_name : f <2><178>: Abbrev Number: 7 (DW_TAG_variable) <179> DW_AT_name : b <17e> DW_AT_type : signature: 0x534310fbefba324d Contents of the .debug_types section: Signature: 0x534310fbefba324d <1><59>: Abbrev Number: 2 (DW_TAG_structure_type) <5a> DW_AT_name : s ... So, AFAICT gcc drops the top-level struct s dies.