From: wilson Date: Mon, 26 Jan 1998 18:13:41 +0000 (+0000) Subject: Patch from Joern to fix dwarf1 bug: emit debug info for types defined in X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4ad6aeba1632712eb527b2ce8a51359346e86a2b;p=platform%2Fupstream%2Flinaro-gcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@17490 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fcaa21f..deb2d9c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Mon Jan 26 18:11:30 1998 J"orn Rennecke + + * 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. + Mon Jan 26 01:44:12 1998 Jeffrey A Law (law@cygnus.com) * h8300.c (print_operand): Handle CONST_DOUBLE for 'e', 'f', and diff --git a/gcc/c-decl.c b/gcc/c-decl.c index d7f5737..3c000e2 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4878,7 +4878,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) { register tree link; - for (link = current_function_parm_tags; + for (link = last_function_parm_tags; link; link = TREE_CHAIN (link)) TYPE_CONTEXT (TREE_VALUE (link)) = type; 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. */