From: Richard Biener Date: Fri, 15 Jan 2016 15:37:38 +0000 (+0000) Subject: re PR debug/69137 (ICE in odr_type_p, at ipa-utils.h:257) X-Git-Tag: basepoints/gcc-7~1597 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2bd847fed39669cfd021b9c3068ca84fd98593e4;p=thirdparty%2Fgcc.git re PR debug/69137 (ICE in odr_type_p, at ipa-utils.h:257) 2016-01-15 Richard Biener PR debug/69137 * dwarf2out.c (add_linkage_name_raw): New function split out from ... (add_linkage_name): ... here. (gen_typedef_die): Use add_linkage_name_raw instead of add_linkage_attr to delay DECL_ASSEMBLER_NAME computation if necessary. * g++.dg/lto/pr69137_0.C: New testcase. From-SVN: r232434 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5680be8a8d3d..675893e69931 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-01-15 Richard Biener + + PR debug/69137 + * dwarf2out.c (add_linkage_name_raw): New function split out from ... + (add_linkage_name): ... here. + (gen_typedef_die): Use add_linkage_name_raw instead of + add_linkage_attr to delay DECL_ASSEMBLER_NAME computation + if necessary. + 2016-01-15 Cesar Philippidis * gimplify.c (oacc_default_clause): Decode reference and pointer diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 61a7bf3f4122..f742900037bf 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -18573,6 +18573,26 @@ add_src_coords_attributes (dw_die_ref die, tree decl) /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */ +static void +add_linkage_name_raw (dw_die_ref die, tree decl) +{ + /* Defer until we have an assembler name set. */ + if (!DECL_ASSEMBLER_NAME_SET_P (decl)) + { + limbo_die_node *asm_name; + + asm_name = ggc_cleared_alloc (); + asm_name->die = die; + asm_name->created_for = decl; + asm_name->next = deferred_asm_name; + deferred_asm_name = asm_name; + } + else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)) + add_linkage_attr (die, decl); +} + +/* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl if desired. */ + static void add_linkage_name (dw_die_ref die, tree decl) { @@ -18581,21 +18601,7 @@ add_linkage_name (dw_die_ref die, tree decl) && TREE_PUBLIC (decl) && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)) && die->die_tag != DW_TAG_member) - { - /* Defer until we have an assembler name set. */ - if (!DECL_ASSEMBLER_NAME_SET_P (decl)) - { - limbo_die_node *asm_name; - - asm_name = ggc_cleared_alloc (); - asm_name->die = die; - asm_name->created_for = decl; - asm_name->next = deferred_asm_name; - deferred_asm_name = asm_name; - } - else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)) - add_linkage_attr (die, decl); - } + add_linkage_name_raw (die, decl); } /* Add a DW_AT_name attribute and source coordinate attribute for the @@ -22425,7 +22431,7 @@ gen_typedef_die (tree decl, dw_die_ref context_die) is the name of the typedef decl naming the anonymous struct. This greatly eases the work of consumers of this debug info. */ - add_linkage_attr (lookup_type_die (type), decl); + add_linkage_name_raw (lookup_type_die (type), decl); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c08f8d7f0d4..a09358502f67 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-15 Richard Biener + + PR debug/69137 + * g++.dg/lto/pr69137_0.C: New testcase. + 2016-01-15 Richard Sandiford PR middle-end/69246 diff --git a/gcc/testsuite/g++.dg/lto/pr69137_0.C b/gcc/testsuite/g++.dg/lto/pr69137_0.C new file mode 100644 index 000000000000..09367e2109f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr69137_0.C @@ -0,0 +1,8 @@ +// { dg-lto-do link } +// { dg-lto-options { { -std=c++11 -g -flto } } } +// { dg-extra-ld-options "-r -nostdlib" } + +typedef struct { + typedef struct { } VarSelectorRecord; +} Format14Cmap; +void fn1() { Format14Cmap a; }