From db9e0d2af65c2caafd568536b3613e7e729ab006 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 15 Feb 2007 04:19:33 +0000 Subject: [PATCH] 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: r121979 --- gcc/ChangeLog | 5 +++++ gcc/dwarf2out.c | 4 +++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/ext/interface4.C | 13 +++++++++++++ gcc/testsuite/g++.dg/ext/interface4.h | 8 ++++++++ 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/interface4.C create mode 100644 gcc/testsuite/g++.dg/ext/interface4.h diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01528f29242..870b1e550f4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-02-15 Alexandre Oliva + + * dwarf2out.c (dwarf2out_finish): Accept namespaces as context of + limbo die nodes. + 2007-02-14 Joseph Myers * emit-rtl.c (set_mem_attributes_minus_bitpos): Treat complex diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 92e14e541c3..901fbff5279 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -14375,7 +14375,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 dde94ddb6d1..2c93af2f32d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-02-15 Alexandre Oliva + + * g++.dg/ext/interface4.C, g++.dg/ext/interface4.h: New. + 2007-02-14 Kaveh R. Ghazi * g++.dg/tree-ssa/nothrow-1.C: Skip test if -fpic/-fPIC is used. diff --git a/gcc/testsuite/g++.dg/ext/interface4.C b/gcc/testsuite/g++.dg/ext/interface4.C new file mode 100644 index 00000000000..85bb912839a --- /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 00000000000..0971b372217 --- /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; +}