diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2010-12-03 11:56:53 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-12-03 11:56:53 -0500 |
commit | 9c60a01a9c238e216af7cd952c7b785842b6a6a4 (patch) | |
tree | 41053c3354b7bd808d0be7b86cf81ce684cf82d7 /gcc | |
parent | 3ee353e956beac249a08337099ec885ae28bba04 (diff) | |
download | gcc-9c60a01a9c238e216af7cd952c7b785842b6a6a4.zip gcc-9c60a01a9c238e216af7cd952c7b785842b6a6a4.tar.gz gcc-9c60a01a9c238e216af7cd952c7b785842b6a6a4.tar.bz2 |
re PR debug/46123 (ICE: in output_aranges, at dwarf2out.c:11531 with -feliminate-dwarf2-dups -g)
PR debug/46123
* dwarf2out.c (gen_tagged_type_die): Don't put local types in
a declaration DIE.
From-SVN: r167436
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C | 47 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/pr46123.C | 47 |
5 files changed, 110 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fb26ae..338e324 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-12-03 Jason Merrill <jason@redhat.com> + + PR debug/46123 + * dwarf2out.c (gen_tagged_type_die): Don't put local types in + a declaration DIE. + 2010-12-03 Nathan Froyd <froydnj@codesourcery.com> * config/arm/arm.c (arm_legitimate_index_p): Split diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 75faec5..acb70ed 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -20212,6 +20212,10 @@ gen_tagged_type_die (tree type, out yet, use a NULL context for now; it will be fixed up in decls_for_scope. */ context_die = lookup_decl_die (TYPE_CONTEXT (type)); + /* A declaration DIE doesn't count; nested types need to go in the + specification. */ + if (context_die && is_declaration_die (context_die)) + context_die = NULL; need_pop = 0; } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e70cf6a..f46c555 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-12-03 Jakub Jelinek <jakub@redhat.com> + + PR debug/46123 + * g++.dg/debug/pr46123.C: New test. + * g++.dg/debug/dwarf2/pr46123.C: New test. + 2010-12-03 Jason Merrill <jason@redhat.com> PR c++/46058 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C new file mode 100644 index 0000000..eee192c --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C @@ -0,0 +1,47 @@ +// PR debug/46123 +// { dg-do compile } +// { dg-options "-gdwarf-4" } + +struct foo +{ + static int bar () + { + int i; + static int baz = 1; + { + static int baz = 2; + i = baz++; + } + { + struct baz + { + static int m () + { + static int n; + return n += 10; + } + }; + baz a; + i += a.m (); + } + { + static int baz = 3; + i += baz; + baz += 30; + } + i += baz; + baz += 60; + return i; + } +}; + +int main () +{ + foo x; + + if (x.bar () != 16) + return 1; + if (x.bar() != 117) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.dg/debug/pr46123.C b/gcc/testsuite/g++.dg/debug/pr46123.C new file mode 100644 index 0000000..9e115cd --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/pr46123.C @@ -0,0 +1,47 @@ +// PR debug/46123 +// { dg-do compile } +// { dg-options "-g -feliminate-dwarf2-dups" } + +struct foo +{ + static int bar () + { + int i; + static int baz = 1; + { + static int baz = 2; + i = baz++; + } + { + struct baz + { + static int m () + { + static int n; + return n += 10; + } + }; + baz a; + i += a.m (); + } + { + static int baz = 3; + i += baz; + baz += 30; + } + i += baz; + baz += 60; + return i; + } +}; + +int main () +{ + foo x; + + if (x.bar () != 16) + return 1; + if (x.bar() != 117) + return 1; + return 0; +} |