dwarf2out.c (pend_type, [...]): Lose.

* dwarf2out.c (pend_type, output_pending_types_for_scope): Lose.
        (splice_child_die): Handle moving a child DIE from the declaration
        DIE of a class to its specification.
        (gen_struct_or_union_type_die): Use 'complete' consistently.
        (gen_decl_die): Generate the virtual context DIE first.
        Use decl_ultimate_origin instead of DECL_ABSTRACT_ORIGIN.

From-SVN: r30662
This commit is contained in:
Jason Merrill 1999-11-25 09:31:49 +00:00 committed by Jason Merrill
parent 51621758ba
commit 2081603cf5
2 changed files with 24 additions and 76 deletions

View File

@ -1,3 +1,12 @@
1999-11-25 Jason Merrill <jason@casey.cygnus.com>
* dwarf2out.c (pend_type, output_pending_types_for_scope): Lose.
(splice_child_die): Handle moving a child DIE from the declaration
DIE of a class to its specification.
(gen_struct_or_union_type_die): Use 'complete' consistently.
(gen_decl_die): Generate the virtual context DIE first.
Use decl_ultimate_origin instead of DECL_ABSTRACT_ORIGIN.
1999-11-24 Gavin Romig-Koch <gavin@cygnus.com>
* config/mips/mips.md (call_value_multiple_interanal1): New.

View File

@ -2322,23 +2322,6 @@ static unsigned arange_table_in_use;
arange_table. */
#define ARANGE_TABLE_INCREMENT 64
/* A pointer to the base of a list of pending types which we haven't
generated DIEs for yet, but which we will have to come back to
later on. */
static tree *pending_types_list;
/* Number of elements currently allocated for the pending_types_list. */
static unsigned pending_types_allocated;
/* Number of elements of pending_types_list currently in use. */
static unsigned pending_types;
/* Size (in elements) of increments by which we may expand the pending
types list. Actually, a single hunk of space of this size should
be enough for most typical programs. */
#define PENDING_TYPES_INCREMENT 64
/* A pointer to the base of a list of incomplete types which might be
completed at some later time. */
@ -2511,8 +2494,6 @@ static void gen_set_type_die PROTO((tree, dw_die_ref));
#if 0
static void gen_entry_point_die PROTO((tree, dw_die_ref));
#endif
static void pend_type PROTO((tree));
static void output_pending_types_for_scope PROTO((dw_die_ref));
static void gen_inlined_enumeration_type_die PROTO((tree, dw_die_ref));
static void gen_inlined_structure_type_die PROTO((tree, dw_die_ref));
static void gen_inlined_union_type_die PROTO((tree, dw_die_ref));
@ -4153,8 +4134,8 @@ add_child_die (die, child_die)
}
}
/* Move CHILD, which must be a child of PARENT, to the front of
PARENT's list of children. */
/* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
is the specification, to the front of PARENT's list of children. */
static void
splice_child_die (parent, child)
@ -4165,9 +4146,14 @@ splice_child_die (parent, child)
/* We want the declaration DIE from inside the class, not the
specification DIE at toplevel. */
if (child->die_parent != parent)
child = get_AT_ref (child, DW_AT_specification);
{
dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
if (tmp)
child = tmp;
}
if (parent == NULL || child == NULL || child->die_parent != parent)
if (child->die_parent != parent
&& child->die_parent != get_AT_ref (parent, DW_AT_specification))
abort ();
for (p = &(parent->die_child); *p; p = &((*p)->die_sib))
@ -7954,45 +7940,6 @@ gen_entry_point_die (decl, context_die)
}
#endif
/* Remember a type in the pending_types_list. */
static void
pend_type (type)
register tree type;
{
if (pending_types == pending_types_allocated)
{
pending_types_allocated += PENDING_TYPES_INCREMENT;
pending_types_list
= (tree *) xrealloc (pending_types_list,
sizeof (tree) * pending_types_allocated);
}
pending_types_list[pending_types++] = type;
}
/* Output any pending types (from the pending_types list) which we can output
now (taking into account the scope that we are working on now).
For each type output, remove the given type from the pending_types_list
*before* we try to output it. */
static void
output_pending_types_for_scope (context_die)
register dw_die_ref context_die;
{
register tree type;
while (pending_types)
{
--pending_types;
type = pending_types_list[pending_types];
gen_type_die (type, context_die);
if (!TREE_ASM_WRITTEN (type))
abort ();
}
}
/* Remember a type in the incomplete_types_list. */
static void
@ -9054,16 +9001,9 @@ gen_struct_or_union_type_die (type, context_die)
else
remove_AT (type_die, DW_AT_declaration);
/* If we're not in the right context to be defining this type, defer to
avoid tricky recursion. */
if (TYPE_SIZE (type) && decl_scope_depth > 0 && scope_die == comp_unit_die)
{
add_AT_flag (type_die, DW_AT_declaration, 1);
pend_type (type);
}
/* If this type has been completed, then give it a byte_size attribute and
then give a list of members. */
else if (complete)
if (complete)
{
/* Prevent infinite recursion in cases where the type of some member of
this type is expressed in terms of this type itself. */
@ -9548,14 +9488,14 @@ gen_decl_die (decl, context_die)
have described its return type. */
gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
/* And its virtual context. */
if (DECL_VINDEX (decl) != NULL_TREE)
gen_type_die (DECL_CONTEXT (decl), context_die);
/* And its containing type. */
origin = decl_class_context (decl);
if (origin != NULL_TREE)
gen_type_die_for_member (origin, decl, context_die);
/* And its virtual context. */
if (DECL_VINDEX (decl) != NULL_TREE)
gen_type_die (DECL_CONTEXT (decl), context_die);
}
/* Now output a DIE to represent the function itself. */
@ -9575,7 +9515,7 @@ gen_decl_die (decl, context_die)
inline function) we have to generate a special (abbreviated)
DW_TAG_structure_type, DW_TAG_union_type, or DW_TAG_enumeration_type
DIE here. */
if (TYPE_DECL_IS_STUB (decl) && DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
{
gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
break;
@ -9789,7 +9729,6 @@ dwarf2out_decl (decl)
}
gen_decl_die (decl, context_die);
output_pending_types_for_scope (comp_unit_die);
}
/* Output a marker (i.e. a label) for the beginning of the generated code for