re PR debug/69137 (ICE in odr_type_p, at ipa-utils.h:257)
authorRichard Biener <rguenther@suse.de>
Fri, 15 Jan 2016 15:37:38 +0000 (15:37 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 15 Jan 2016 15:37:38 +0000 (15:37 +0000)
2016-01-15  Richard Biener  <rguenther@suse.de>

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

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/pr69137_0.C [new file with mode: 0644]

index 5680be8..675893e 100644 (file)
@@ -1,3 +1,12 @@
+2016-01-15  Richard Biener  <rguenther@suse.de>
+
+       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  <cesar@codesourcery.com>
 
        * gimplify.c (oacc_default_clause): Decode reference and pointer
index 61a7bf3..f742900 100644 (file)
@@ -18574,6 +18574,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<limbo_die_node> ();
+      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)
 {
   if (debug_info_level > DINFO_LEVEL_NONE
@@ -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<limbo_die_node> ();
-         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);
            }
        }
 
index 2c08f8d..a093585 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-15  Richard Biener  <rguenther@suse.de>
+
+       PR debug/69137
+       * g++.dg/lto/pr69137_0.C: New testcase.
+
 2016-01-15  Richard Sandiford  <richard.sandiford@arm.com>
 
        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 (file)
index 0000000..09367e2
--- /dev/null
@@ -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; }