From e9122ef60858058cb474b3d3bb51507b7fd1d14c Mon Sep 17 00:00:00 2001
From: Marek Polacek <polacek@redhat.com>
Date: Wed, 21 Oct 2015 17:30:20 +0000
Subject: [PATCH] re PR c/68024 (Diagnose variadic functions defined without
 prototypes)

	PR c/68024
	* c-decl.c (start_function): Warn about vararg functions without
	a prototype.

	* gcc.dg/pr68024.c: New test.

From-SVN: r229131
---
 gcc/c/ChangeLog                | 6 ++++++
 gcc/c/c-decl.c                 | 6 ++++++
 gcc/testsuite/ChangeLog        | 5 +++++
 gcc/testsuite/gcc.dg/pr68024.c | 5 +++++
 4 files changed, 22 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/pr68024.c

diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 34aafc2c59d9..b5179a3a7147 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-21  Marek Polacek  <polacek@redhat.com>
+
+	PR c/68024
+	* c-decl.c (start_function): Warn about vararg functions without
+	a prototype.
+
 2015-10-21  Ilya Enkovich  <enkovich.gnu@gmail.com>
 
 	* c-typeck.c (build_conditional_expr): Use boolean vector
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index ce8406a13e47..4a0e090dbd07 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -8328,6 +8328,12 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
 	  && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
 			TREE_TYPE (TREE_TYPE (old_decl))))
 	{
+	  if (stdarg_p (TREE_TYPE (old_decl)))
+	    {
+	      warning_at (loc, 0, "%q+D defined as variadic function "
+			  "without prototype", decl1);
+	      locate_old_decl (old_decl);
+	    }
 	  TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
 					      TREE_TYPE (decl1));
 	  current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index db0f89665a29..4f10616178a8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-21  Marek Polacek  <polacek@redhat.com>
+
+	PR c/68024
+	* gcc.dg/pr68024.c: New test.
+
 2015-10-21  Nathan Sidwell  <nathan@codesourcery.com>
 
 	* c-c++-common/goacc/clauses-fail.c: Adjust errors.
diff --git a/gcc/testsuite/gcc.dg/pr68024.c b/gcc/testsuite/gcc.dg/pr68024.c
new file mode 100644
index 000000000000..a750917702f0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr68024.c
@@ -0,0 +1,5 @@
+/* PR c/68024 */
+/* { dg-do compile } */
+
+void f (int, ...);
+void f (a) int a; {} /* { dg-warning "defined as variadic function without prototype" } */
-- 
GitLab