OSDN Git Service

2012-01-03 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jan 2012 11:30:27 +0000 (11:30 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jan 2012 11:30:27 +0000 (11:30 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182835 138bc75d-0d04-0410-961f-82ee72b054a4

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

index cac0108..1c21031 100644 (file)
@@ -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
index 850eb55..b553775 100644 (file)
@@ -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);
            }
        }
     }
index 6ac425a..6185d58 100644 (file)
@@ -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 (file)
index 0000000..e84d555
--- /dev/null
@@ -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() {}