https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91507
Bug ID: 91507 Summary: wrong debug for completed array with previous incomplete declaration Product: gcc Version: 7.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- extern char *zzz[]; char *zzz[ ] = { "abc", "cde" }; according to the C standard the array type of zzz is completed at the end of the initializer list but we emit the following dwarf where the definition inherits the type specification of the declaration: <1><1d>: Abbrev Number: 2 (DW_TAG_array_type) <1e> DW_AT_type : <0x28> <22> DW_AT_sibling : <0x28> <2><26>: Abbrev Number: 3 (DW_TAG_subrange_type) <2><27>: Abbrev Number: 0 ... <1><35>: Abbrev Number: 6 (DW_TAG_variable) <36> DW_AT_name : zzz <3a> DW_AT_decl_file : 1 <3b> DW_AT_decl_line : 1 <3c> DW_AT_decl_column : 14 <3d> DW_AT_type : <0x1d> <41> DW_AT_external : 1 <41> DW_AT_declaration : 1 ... <1><48>: Abbrev Number: 7 (DW_TAG_variable) <49> DW_AT_specification: <0x35> <4d> DW_AT_decl_line : 2 <4e> DW_AT_decl_column : 7 <4f> DW_AT_location : 9 byte block: 3 0 0 0 0 0 0 0 0 (DW_OP_addr: 0) technically this is a regression from before early-debug where we omitted debug info for the declaration. Correct debug info is emitted if the declaration is omitted.