re PR debug/41063 (ICE in output_die)

gcc/ChangeLog:

	PR debug/41063
	* dwarf2out.c (gen_type_die_with_usage): Use proper context for
	struct/union/enum types local to a function.

gcc/testsuite/ChangeLog:

	PR debug/41063
	* g++.dg/debug/dwarf2/pr41063.C: New test.

From-SVN: r151185
This commit is contained in:
Cary Coutant 2009-08-28 13:32:29 -07:00
parent 059a5f9f1c
commit e6a83a8e9e
2 changed files with 29 additions and 0 deletions

View File

@ -15573,6 +15573,15 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
context_die = lookup_type_die (TYPE_CONTEXT (type));
need_pop = 1;
}
else if (TYPE_CONTEXT (type) != NULL_TREE
&& (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
{
/* If this type is local to a function that hasn't been written
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));
need_pop = 0;
}
else
{
context_die = declare_in_namespace (type, context_die);

View File

@ -0,0 +1,20 @@
// Contributed by Cary Coutant <ccoutant@google.com>
// Origin: PR debug/41063
// { dg-do compile }
struct A {
virtual void run();
};
void test() {
struct B : public A {
void run() {
struct C : public A {
C() { }
B *b_;
};
C c;
}
};
B b;
}