*** empty log message ***
authorRichard Stallman <rms@gnu.org>
Sun, 8 Mar 1992 22:08:20 +0000 (22:08 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 8 Mar 1992 22:08:20 +0000 (22:08 +0000)
From-SVN: r423

gcc/c-decl.c

index 09038c16a653c0b17042f83c76b70ce93eeef5de..70b24ad65114cdc316f01aa66d822870131e7926 100644 (file)
@@ -1073,13 +1073,13 @@ pushtag (name, type)
 
       if (TYPE_NAME (type) == 0)
        TYPE_NAME (type) = name;
-
-      if (b == global_binding_level)
-       b->tags = perm_tree_cons (name, type, b->tags);
-      else
-       b->tags = saveable_tree_cons (name, type, b->tags);
     }
 
+  if (b == global_binding_level)
+    b->tags = perm_tree_cons (name, type, b->tags);
+  else
+    b->tags = saveable_tree_cons (name, type, b->tags);
+
   /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
      tagged type we just added to the current binding level.  This fake
      NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
@@ -4229,11 +4229,18 @@ parmlist_tags_warning ()
   for (elt = current_binding_level->tags; elt; elt = TREE_CHAIN (elt))
     {
       enum tree_code code = TREE_CODE (TREE_VALUE (elt));
-      warning ("`%s %s' declared inside parameter list",
-              (code == RECORD_TYPE ? "struct"
-               : code == UNION_TYPE ? "union"
-               : "enum"),
-              IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
+      if (TREE_PURPOSE (elt) != 0)
+       warning ("`%s %s' declared inside parameter list",
+                (code == RECORD_TYPE ? "struct"
+                 : code == UNION_TYPE ? "union"
+                 : "enum"),
+                IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
+      else
+       warning ("anonymous %s declared inside parameter list",
+                (code == RECORD_TYPE ? "struct"
+                 : code == UNION_TYPE ? "union"
+                 : "enum"));
+
       if (! already)
        {
          warning ("its scope is only this definition or declaration,");
@@ -5310,6 +5317,19 @@ store_parm_decls ()
          else
            actual = type;
 
+         /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
+            of the type of this function, but we need to avoid having this
+            affect the types of other similarly-typed functions, so we must
+            first force the generation of an identical (but separate) type
+            node for the relevant function type.  The new node we create
+            will be a variant of the main variant of the original function
+            type.  */
+
+         TREE_TYPE (fndecl)
+           = build_type_copy (TYPE_MAIN_VARIANT (TREE_TYPE (fndecl)),
+                              TYPE_READONLY (TREE_TYPE (fndecl)),
+                              TYPE_VOLATILE (TREE_TYPE (fndecl)));
+
          TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
        }