(grokdeclarator): Generate a warning if -Wimplicit, unless a warning
authorRichard Kenner <kenner@gcc.gnu.org>
Tue, 12 Nov 1996 19:17:33 +0000 (14:17 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Tue, 12 Nov 1996 19:17:33 +0000 (14:17 -0500)
was already generated by -Wreturn-type.

From-SVN: r13135

gcc/c-decl.c

index 13d6887d14d45a33681b715abeb4a1fd2d49a67d..accc0257e96ad719b69eba0ac41567d46f787387 100644 (file)
@@ -4277,10 +4277,20 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
 
   if (type == 0)
     {
-      if (funcdef_flag && warn_return_type
-         && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
-                           | (1 << (int) RID_SIGNED) | (1 << (int) RID_UNSIGNED))))
-       warn_about_return_type = 1;
+      if (! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
+                        | (1 << (int) RID_SIGNED)
+                        | (1 << (int) RID_UNSIGNED))))
+       {
+         /* C9x will probably require a diagnostic here.
+            For now, issue a warning if -Wreturn-type and this is a function,
+            or if -Wimplicit; prefer the former warning since it is more
+            explicit.  */
+         if ((warn_implicit || warn_return_type) && funcdef_flag)
+           warn_about_return_type = 1;
+         else if (warn_implicit)
+           warning ("type defaults to `int' in declaration of `%s'", name);
+       }
+
       defaulted_int = 1;
       type = integer_type_node;
     }