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
This commit is contained in:
parent
bf5f0e9098
commit
0c84c61834
@ -1,3 +1,8 @@
|
||||
Wed Apr 29 13:46:03 1998 Jim Wilson <wilson@cygnus.com>
|
||||
|
||||
* dwarf2out.c (scope_die_for): If could not find proper scope,
|
||||
check for and handle tagged type with incorrect TYPE_CONTEXT.
|
||||
|
||||
Wed Apr 29 15:34:40 1998 John Carr <jfc@mit.edu>
|
||||
|
||||
* calls.c (expand_call): Fix recognition of C++ operator new.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user