From 0c84c6183433da16ca1062e0accb15b5f3abd664 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 29 Apr 1998 13:47:28 +0000 Subject: Fix dwarf2 abort while compiling mips simulator, reported by Michael Tiemann. * dwarf2out.c (scope_die_for): If could not find proper scope, check for and handle tagged type with incorrect TYPE_CONTEXT. From-SVN: r19493 --- gcc/dwarf2out.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'gcc/dwarf2out.c') diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 5ee4a90..71f2ec0 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -7577,6 +7577,24 @@ scope_die_for (t, context_die) i = decl_scope_table[i].previous)) ; + /* ??? Integrate_decl_tree does not handle BLOCK_TYPE_TAGS, nor + does it try to handle types defined by TYPE_DECLs. Such types + thus have an incorrect TYPE_CONTEXT, which points to the block + they were originally defined in, instead of the current block + created by function inlining. We try to detect that here and + work around it. */ + + if (i < 0 && scope_die == comp_unit_die + && TREE_CODE (containing_scope) == BLOCK + && is_tagged_type (t) + && (block_ultimate_origin (decl_scope_table[decl_scope_depth - 1].scope) + == containing_scope)) + { + scope_die = context_die; + /* Since the checks below are no longer applicable. */ + i = 0; + } + if (i < 0) { if (scope_die != comp_unit_die -- cgit v1.1