From: Alexandre Oliva Date: Sat, 30 Jun 2007 04:54:06 +0000 (+0000) Subject: dwarf2out.c (dwarf2out_finish): Accept namespaces as context of limbo die nodes. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48dc19e660276254839deba5119c01544624e774;p=thirdparty%2Fgcc.git dwarf2out.c (dwarf2out_finish): Accept namespaces as context of limbo die nodes. gcc/ChangeLog: * dwarf2out.c (dwarf2out_finish): Accept namespaces as context of limbo die nodes. gcc/testsuite/ChangeLog: * g++.dg/ext/interface4.C, g++.dg/ext/interface4.h: New. From-SVN: r126139 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 050623a02406..713ae732a8cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-06-30 Alexandre Oliva + + * dwarf2out.c (dwarf2out_finish): Accept namespaces as context of + limbo die nodes. + 2007-06-28 Seongbae Park * config/arm/arm.c (arm_get_frame_offsets): Set diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index c244d4b3708f..0eaf18d79021 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -14151,7 +14151,9 @@ 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); + gcc_assert (context + && (TREE_CODE (context) == FUNCTION_DECL + || TREE_CODE (context) == NAMESPACE_DECL)); origin = lookup_decl_die (context); if (origin) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e540725a14ca..dcf606f27a14 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-06-30 Alexandre Oliva + + * g++.dg/ext/interface4.C, g++.dg/ext/interface4.h: New. + 2007-06-28 Seongbae Park * gcc.target/arm/stack-corruption.c: New test. diff --git a/gcc/testsuite/g++.dg/ext/interface4.C b/gcc/testsuite/g++.dg/ext/interface4.C new file mode 100644 index 000000000000..85bb912839ad --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface4.C @@ -0,0 +1,13 @@ +/* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=227376 */ + +/* { dg-do compile } */ +/* { dg-options "-g2" } */ + +/* We used to crash when emitting debug info for type N::A because its + context was a namespace, not a function. */ + +#include "interface4.h" + +void f ( ) { + g ( ); +} diff --git a/gcc/testsuite/g++.dg/ext/interface4.h b/gcc/testsuite/g++.dg/ext/interface4.h new file mode 100644 index 000000000000..0971b3722171 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface4.h @@ -0,0 +1,8 @@ +#pragma interface +namespace N { + typedef int A; +} +inline void g ( ) { + static N :: A a = 0; + a = a; +}