dwarfout.c (add_incomplete_type): New fn.
* dwarfout.c (add_incomplete_type): New fn. (output_type): Call it. (retry_incomplete_types): New fn. (dwarfout_finish): Call it. From Eric Raskin <ehr@listworks.com>: (output_type): Output types for bases. From-SVN: r27546
This commit is contained in:
parent
f33e32a8cc
commit
75c613dbc5
@ -1,6 +1,16 @@
|
|||||||
|
Wed Jun 16 10:33:02 1999 Jason Merrill <jason@yorick.cygnus.com>
|
||||||
|
|
||||||
|
* dwarfout.c (add_incomplete_type): New fn.
|
||||||
|
(output_type): Call it.
|
||||||
|
(retry_incomplete_types): New fn.
|
||||||
|
(dwarfout_finish): Call it.
|
||||||
|
|
||||||
|
From Eric Raskin <ehr@listworks.com>:
|
||||||
|
(output_type): Output types for bases.
|
||||||
|
|
||||||
Tue Jun 15 12:51:23 1999 Alexandre Oliva <oliva@dcc.unicamp.br>
|
Tue Jun 15 12:51:23 1999 Alexandre Oliva <oliva@dcc.unicamp.br>
|
||||||
|
|
||||||
* config/mips/mips.c (mips_output_conditional_branch): Add `break'
|
* mips.c (mips_output_conditional_branch): Add `break'
|
||||||
between `default' label and `close braces'.
|
between `default' label and `close braces'.
|
||||||
|
|
||||||
Tue Jun 15 01:55:20 1999 David O'Brien <obrien@FreeBSD.org>
|
Tue Jun 15 01:55:20 1999 David O'Brien <obrien@FreeBSD.org>
|
||||||
|
@ -270,6 +270,22 @@ static unsigned pending_types;
|
|||||||
|
|
||||||
#define PENDING_TYPES_INCREMENT 64
|
#define PENDING_TYPES_INCREMENT 64
|
||||||
|
|
||||||
|
/* A pointer to the base of a list of incomplete types which might be
|
||||||
|
completed at some later time. */
|
||||||
|
|
||||||
|
static tree *incomplete_types_list;
|
||||||
|
|
||||||
|
/* Number of elements currently allocated for the incomplete_types_list. */
|
||||||
|
static unsigned incomplete_types_allocated;
|
||||||
|
|
||||||
|
/* Number of elements of incomplete_types_list currently in use. */
|
||||||
|
static unsigned incomplete_types;
|
||||||
|
|
||||||
|
/* Size (in elements) of increments by which we may expand the incomplete
|
||||||
|
types list. Actually, a single hunk of space of this size should
|
||||||
|
be enough for most typical programs. */
|
||||||
|
#define INCOMPLETE_TYPES_INCREMENT 64
|
||||||
|
|
||||||
/* Pointer to an artificial RECORD_TYPE which we create in dwarfout_init.
|
/* Pointer to an artificial RECORD_TYPE which we create in dwarfout_init.
|
||||||
This is used in a hack to help us get the DIEs describing types of
|
This is used in a hack to help us get the DIEs describing types of
|
||||||
formal parameters to come *after* all of the DIEs describing the formal
|
formal parameters to come *after* all of the DIEs describing the formal
|
||||||
@ -4216,6 +4232,40 @@ output_pending_types_for_scope (containing_scope)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remember a type in the incomplete_types_list. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_incomplete_type (type)
|
||||||
|
tree type;
|
||||||
|
{
|
||||||
|
if (incomplete_types == incomplete_types_allocated)
|
||||||
|
{
|
||||||
|
incomplete_types_allocated += INCOMPLETE_TYPES_INCREMENT;
|
||||||
|
incomplete_types_list
|
||||||
|
= (tree *) xrealloc (incomplete_types_list,
|
||||||
|
sizeof (tree) * incomplete_types_allocated);
|
||||||
|
}
|
||||||
|
|
||||||
|
incomplete_types_list[incomplete_types++] = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Walk through the list of incomplete types again, trying once more to
|
||||||
|
emit full debugging info for them. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
retry_incomplete_types ()
|
||||||
|
{
|
||||||
|
register tree type;
|
||||||
|
|
||||||
|
finalizing = 1;
|
||||||
|
while (incomplete_types)
|
||||||
|
{
|
||||||
|
--incomplete_types;
|
||||||
|
type = incomplete_types_list[incomplete_types];
|
||||||
|
output_type (type, NULL_TREE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_type (type, containing_scope)
|
output_type (type, containing_scope)
|
||||||
register tree type;
|
register tree type;
|
||||||
@ -4380,7 +4430,10 @@ output_type (type, containing_scope)
|
|||||||
&& TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_TYPE
|
&& TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_TYPE
|
||||||
&& TREE_CODE (TYPE_CONTEXT (type)) != METHOD_TYPE))
|
&& TREE_CODE (TYPE_CONTEXT (type)) != METHOD_TYPE))
|
||||||
&& !finalizing)
|
&& !finalizing)
|
||||||
return; /* EARLY EXIT! Avoid setting TREE_ASM_WRITTEN. */
|
{
|
||||||
|
add_incomplete_type (type);
|
||||||
|
return; /* EARLY EXIT! Avoid setting TREE_ASM_WRITTEN. */
|
||||||
|
}
|
||||||
|
|
||||||
/* Prevent infinite recursion in cases where the type of some
|
/* Prevent infinite recursion in cases where the type of some
|
||||||
member of this type is expressed in terms of this type itself. */
|
member of this type is expressed in terms of this type itself. */
|
||||||
@ -4435,7 +4488,11 @@ output_type (type, containing_scope)
|
|||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
for (i = 0; i < n_bases; i++)
|
for (i = 0; i < n_bases; i++)
|
||||||
output_die (output_inheritance_die, TREE_VEC_ELT (bases, i));
|
{
|
||||||
|
tree binfo = TREE_VEC_ELT (bases, i);
|
||||||
|
output_type (BINFO_TYPE (binfo), containing_scope);
|
||||||
|
output_die (output_inheritance_die, binfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
++in_class;
|
++in_class;
|
||||||
@ -5844,6 +5901,8 @@ dwarfout_finish ()
|
|||||||
{
|
{
|
||||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||||
|
|
||||||
|
retry_incomplete_types ();
|
||||||
|
|
||||||
fputc ('\n', asm_out_file);
|
fputc ('\n', asm_out_file);
|
||||||
ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
|
ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user