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