diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-01-26 18:13:41 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1998-01-26 10:13:41 -0800 |
commit | 2a851b5ccfc3c95025e154f5b4c930dd90c21527 (patch) | |
tree | 8401a7a70e946b01e5c7597c1298b5221a9fe170 /gcc/dwarfout.c | |
parent | ac2f83cb38a4d1eb9b0ff4705f65bfdaa1b09eaa (diff) | |
download | gcc-2a851b5ccfc3c95025e154f5b4c930dd90c21527.zip gcc-2a851b5ccfc3c95025e154f5b4c930dd90c21527.tar.gz gcc-2a851b5ccfc3c95025e154f5b4c930dd90c21527.tar.bz2 |
Patch from Joern to fix dwarf1 bug: emit debug info for types defined in
parameter lists.
* c-decl.c (grokdeclarator): Get parameter tags from
last_function_parm_tags.
* dwarfout.c (output_formal_types): Set TREE_ASM_WRITTEN before
traversing the parameter types.
(output_type): No early exit for FUNCTION_TYPE / METHOD_TYPE context.
From-SVN: r17490
Diffstat (limited to 'gcc/dwarfout.c')
-rw-r--r-- | gcc/dwarfout.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c index 34527a3..406fb89 100644 --- a/gcc/dwarfout.c +++ b/gcc/dwarfout.c @@ -4018,6 +4018,12 @@ output_formal_types (function_or_method_type) register tree formal_type = NULL; register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type); + /* Set TREE_ASM_WRITTEN while processing the parameters, lest we + get bogus recursion when outputting tagged types local to a + function declaration. */ + int save_asm_written = TREE_ASM_WRITTEN (function_or_method_type); + TREE_ASM_WRITTEN (function_or_method_type) = 1; + /* In the case where we are generating a formal types list for a C++ non-static member function type, skip over the first thing on the TYPE_ARG_TYPES list because it only represents the type of the @@ -4063,6 +4069,8 @@ output_formal_types (function_or_method_type) output_type (formal_type, function_or_method_type); } + + TREE_ASM_WRITTEN (function_or_method_type) = save_asm_written; } /* Remember a type in the pending_types_list. */ @@ -4353,7 +4361,9 @@ output_type (type, containing_scope) if (TYPE_SIZE (type) == 0 && (TYPE_CONTEXT (type) == NULL - || TREE_CODE_CLASS (TREE_CODE (TYPE_CONTEXT (type))) == 't') + || (TREE_CODE_CLASS (TREE_CODE (TYPE_CONTEXT (type))) == 't' + && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_TYPE + && TREE_CODE (TYPE_CONTEXT (type)) != METHOD_TYPE)) && !finalizing) return; /* EARLY EXIT! Avoid setting TREE_ASM_WRITTEN. */ |