File Wunprototyped-calls.diff of Package gcc43

Index: gcc/c.opt
===================================================================
--- gcc/c.opt.orig	2008-02-19 10:56:00.000000000 +0100
+++ gcc/c.opt	2009-11-20 13:50:25.000000000 +0100
@@ -457,6 +457,10 @@ Wunknown-pragmas
 C ObjC C++ ObjC++ Warning
 Warn about unrecognized pragmas
 
+Wunprototyped-calls
+C Var(warn_unprototyped_calls) Warning
+Warn about calls to unprototyped functions with at least one argument
+
 Wunused-macros
 C ObjC C++ ObjC++ Warning
 Warn about macros defined in the main file that are not used
Index: gcc/c-opts.c
===================================================================
--- gcc/c-opts.c.orig	2008-02-19 10:56:00.000000000 +0100
+++ gcc/c-opts.c	2009-11-20 13:50:25.000000000 +0100
@@ -419,9 +419,12 @@ c_common_handle_option (size_t scode, co
 	warn_uninitialized = (value ? 2 : 0);
 
       if (!c_dialect_cxx ())
-	/* We set this to 2 here, but 1 in -Wmain, so -ffreestanding
-	   can turn it off only if it's not explicit.  */
-	warn_main = value * 2;
+	{
+	  /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding
+	     can turn it off only if it's not explicit.  */
+	  warn_main = value * 2;
+	  warn_unprototyped_calls = 1;
+	}
       else
 	{
 	  /* C++-specific warnings.  */
Index: gcc/testsuite/gcc.dg/cleanup-1.c
===================================================================
--- gcc/testsuite/gcc.dg/cleanup-1.c.orig	2008-02-19 10:53:29.000000000 +0100
+++ gcc/testsuite/gcc.dg/cleanup-1.c	2009-11-20 13:50:25.000000000 +0100
@@ -6,7 +6,7 @@
 #define C(x)	__attribute__((cleanup(x)))
 
 static int f1(void *x U) { return 0; }
-static void f2() { }
+static void f2() { }	/* { dg-message "declared here" "" } */
 static void f3(void) { }
 static void f4(void *x U) { }
 static void f5(int *x U) { }
@@ -18,7 +18,7 @@ static void f9(int x U) { }
 void test(void)
 {
   int o1 C(f1);
-  int o2 C(f2);
+  int o2 C(f2);		/* { dg-warning "without a real prototype" } */
   int o3 C(f3);		/* { dg-error "too many arguments" } */
   int o4 C(f4);
   int o5 C(f5);
Index: gcc/c-typeck.c
===================================================================
--- gcc/c-typeck.c.orig	2009-10-19 13:18:20.000000000 +0200
+++ gcc/c-typeck.c	2009-11-20 13:50:25.000000000 +0100
@@ -2457,6 +2457,18 @@ build_function_call (tree function, tree
   if (nargs < 0)
     return error_mark_node;
 
+  /* If we cannot check function arguments because a prototype is
+     missing for the callee, warn here.  */
+  if (warn_unprototyped_calls
+      && nargs > 0 && !TYPE_ARG_TYPES (fntype)
+      && fundecl && !DECL_BUILT_IN (fundecl) && !C_DECL_IMPLICIT (fundecl)
+      && !DECL_ARGUMENTS (fundecl))
+    {
+      warning (OPT_Wunprototyped_calls,
+	       "call to function %qD without a real prototype", fundecl);
+      inform ("%J%qD was declared here", fundecl, fundecl);
+    }
+
   /* Check that the arguments to the function are valid.  */
 
   check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,