]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c-decl.c (grokdeclarator): Get parameter tags from last_function_parm_tags.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Mon, 9 Feb 1998 21:15:14 +0000 (21:15 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 9 Feb 1998 21:15:14 +0000 (14:15 -0700)
        * 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: r17811

gcc/ChangeLog
gcc/c-decl.c
gcc/dwarfout.c

index 56caf507a792706ee71fc96b4862565b83c60a69..5f7c7fa457ffd1355606674eafaca154f9988d75 100644 (file)
@@ -1,3 +1,11 @@
+Mon Feb  9 22:16:04 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * 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 Feb  9 22:10:58 1998  Todd Vierling <tv@pobox.com>
 
        * fixincludes: Tweak fix for struct exception in math.h
index e38cdb15a89a3caa3d596a7ec57bf797b493bff8..468ab2c996812b17edae0a860dbce643d9a582b2 100644 (file)
@@ -4827,7 +4827,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;
index c3d7f82ce7450cd101653fedacfc91a76145297a..c259280e8fb9ce5a38ba6bf5ce1ea15a47a8efef 100644 (file)
@@ -3988,6 +3988,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
@@ -4033,6 +4039,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;
 }
 \f
 /* Remember a type in the pending_types_list.  */
@@ -4323,7 +4331,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.  */