Fix PR46796

Submitted by Richard Guenther on Dec. 19, 2011, 2:10 p.m.

Details

Message ID alpine.LNX.2.00.1112191453430.4527@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Guenther Dec. 19, 2011, 2:10 p.m.
This fixes one old and annyoing bug wrt LTO and debug-information.
We pre-seed the LTO tree streamer cache with nodes from global_trees[]
and friends, but this causes the type variant chain to become corrupt
(in the sense that we do not merge TYPE_DECLs, so a get_qualified_type
will fail to find a variant because the names (TYPE_DECLs) are not
pointer-equal).  dwarf2out.c already contains backup code for this
case (get_qualified_type returning NULL) using __unknown__ for
AT_name.  But we can do better, use the actual name of the type.

[long term we want to stop pre-seeding the LTO tree streamer cache,
but that's clearly nothing for stage3]

Boostrap and regtest pending on x86_64-unknown-linux-gnu, ok if
that succeeds?

Thanks,
Richard.

2011-12-19  Richard Guenther  <rguenther@suse.de>

	PR lto/46796
	* dwarf2out.c (modified_type_die): When the type variant
	chain is corrupt use the types name, if available, instead
	of __unknown__.

Comments

Jason Merrill Dec. 19, 2011, 3:31 p.m.
OK.

Jason

Patch hide | download patch | download mbox

Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c	(revision 182472)
+++ gcc/dwarf2out.c	(working copy)
@@ -9873,7 +9873,14 @@  modified_type_die (tree type, int is_con
     }
   /* This probably indicates a bug.  */
   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
-    add_name_attribute (mod_type_die, "__unknown__");
+    {
+      name = TYPE_NAME (type);
+      if (name
+	  && TREE_CODE (name) == TYPE_DECL)
+	name = DECL_NAME (name);
+      add_name_attribute (mod_type_die,
+			  name ? IDENTIFIER_POINTER (name) : "__unknown__");
+    }
 
   if (qualified_type)
     equate_type_number_to_die (qualified_type, mod_type_die);