From f3321fd71519a24f58a8e21048a191be042ff121 Mon Sep 17 00:00:00 2001
From: Richard Guenther <rguenther@suse.de>
Date: Tue, 3 Jan 2012 11:30:27 +0000
Subject: [PATCH] re PR debug/51650 (LTO ICE in dwarf2out_finish, at
 dwarf2out.c:22501 while building libxul)

2012-01-03  Richard Guenther  <rguenther@suse.de>

	PR debug/51650
	* dwarf2out.c (dwarf2out_finish): Always create a DIE for
	the context of a limbo DIE when it does not already exist.

	* g++.dg/lto/pr51650-3_0.C: New testcase.

From-SVN: r182835
---
 gcc/ChangeLog                          |  6 ++++++
 gcc/dwarf2out.c                        | 11 ++---------
 gcc/testsuite/ChangeLog                |  5 +++++
 gcc/testsuite/g++.dg/lto/pr51650-3_0.C | 20 ++++++++++++++++++++
 4 files changed, 33 insertions(+), 9 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/lto/pr51650-3_0.C

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cac010800fc3..1c21031a0e54 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-03  Richard Guenther  <rguenther@suse.de>
+
+	PR debug/51650
+	* dwarf2out.c (dwarf2out_finish): Always create a DIE for
+	the context of a limbo DIE when it does not already exist.
+
 2012-01-03  Jakub Jelinek  <jakub@redhat.com>
 
 	PR tree-optimization/51719
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 850eb5562172..b5537752b132 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -22501,15 +22501,8 @@ dwarf2out_finish (const char *filename)
 	      else if (TYPE_P (node->created_for))
 		context = TYPE_CONTEXT (node->created_for);
 
-	      gcc_assert (context
-			  && (TREE_CODE (context) == FUNCTION_DECL
-			      || TREE_CODE (context) == NAMESPACE_DECL));
-
-	      origin = lookup_decl_die (context);
-	      if (origin)
-	        add_child_die (origin, die);
-	      else
-	        add_child_die (comp_unit_die (), die);
+	      origin = get_context_die (context);
+	      add_child_die (origin, die);
 	    }
 	}
     }
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6ac425a63d7b..6185d583decd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-03  Richard Guenther  <rguenther@suse.de>
+
+	PR debug/51650
+	* g++.dg/lto/pr51650-3_0.C: New testcase.
+
 2012-01-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
 	PR c++/15867
diff --git a/gcc/testsuite/g++.dg/lto/pr51650-3_0.C b/gcc/testsuite/g++.dg/lto/pr51650-3_0.C
new file mode 100644
index 000000000000..e84d555a0fb0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr51650-3_0.C
@@ -0,0 +1,20 @@
+// { dg-lto-do link }
+// { dg-lto-options { { -flto -g } } }
+
+struct T;
+struct C 
+{
+    typedef ::T T;
+    virtual void E();
+    static T *m ()
+      {
+	static T *d;
+	return d;
+      }
+};
+int
+fn ()
+{
+  C::m ();
+}
+int main() {}
-- 
GitLab