diff options
author | Jason Merrill <jason@gcc.gnu.org> | 1999-06-16 06:38:45 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1999-06-16 06:38:45 -0400 |
commit | 75c613dbc5bfb736400045edde2af639cb266e26 (patch) | |
tree | fdf7690b35163a1cfcd0c37ab2b00464398a5052 | |
parent | f33e32a8ccd4963e4f5b0616f6f08502c2a7df72 (diff) | |
download | gcc-75c613dbc5bfb736400045edde2af639cb266e26.zip gcc-75c613dbc5bfb736400045edde2af639cb266e26.tar.gz gcc-75c613dbc5bfb736400045edde2af639cb266e26.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/dwarfout.c | 63 |
2 files changed, 72 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 267ec44..56ff7e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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> - * config/mips/mips.c (mips_output_conditional_branch): Add `break' + * mips.c (mips_output_conditional_branch): Add `break' between `default' label and `close braces'. Tue Jun 15 01:55:20 1999 David O'Brien <obrien@FreeBSD.org> diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c index ac17f7f..2a1b482 100644 --- a/gcc/dwarfout.c +++ b/gcc/dwarfout.c @@ -270,6 +270,22 @@ static unsigned pending_types; #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. 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 @@ -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 output_type (type, containing_scope) register tree type; @@ -4380,7 +4430,10 @@ output_type (type, containing_scope) && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_TYPE && TREE_CODE (TYPE_CONTEXT (type)) != METHOD_TYPE)) && !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 member of this type is expressed in terms of this type itself. */ @@ -4435,7 +4488,11 @@ output_type (type, containing_scope) register int 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; @@ -5844,6 +5901,8 @@ dwarfout_finish () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; + retry_incomplete_types (); + fputc ('\n', asm_out_file); ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION); |