This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RFA: fix PR c/48116
- From: Tom Tromey <tromey at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 16 Mar 2011 11:18:04 -0600
- Subject: RFA: fix PR c/48116
This patch fixes PR c/48116.
The bug is that -Wreturn-type does not follow the documentation. In
particular, it should warn for this code, but does not:
static void f() {}
static void g() { return f(); }
I think the bug is that c-typeck.c calls pedwarn with either 0 or
OPT_pedantic, but it should use OPT_Wreturn_type in some cases.
I am not completely sure this is the correct patch. In particular, this
patch chooses to report -Wreturn-type over -pedantic, e.g.:
opsy. gcc -pedantic -Wreturn-type --syntax-only q.c
q.c: In function âyâ:
q.c:3:16: warning: ISO C forbids âreturnâ with expression, in function returning void [-Wreturn-type]
This is a somewhat odd situation, in that both -Wreturn-type and
-pedantic must be disabled to eliminate this message.
Also, arguably there should be a different message when -pedantic is not
given.
Bootstrapped and regtested on x86-64 (compile farm).
New test case included.
I did not check to see whether this is a regression.
Tom
2011-03-16 Tom Tromey <tromey@redhat.com>
PR c/48116
* c-typeck.c (c_finish_return): Check warn_return_type.
2011-03-16 Tom Tromey <tromey@redhat.com>
* gcc.dg/Wreturn-type3.c: New file.
Index: c-typeck.c
===================================================================
--- c-typeck.c (revision 170953)
+++ c-typeck.c (working copy)
@@ -8628,10 +8628,11 @@
{
current_function_returns_null = 1;
if (TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
- pedwarn (loc, 0,
+ pedwarn (loc, warn_return_type ? OPT_Wreturn_type : 0,
"%<return%> with a value, in function returning void");
else
- pedwarn (loc, OPT_pedantic, "ISO C forbids "
+ pedwarn (loc, warn_return_type ? OPT_Wreturn_type : OPT_pedantic,
+ "ISO C forbids "
"%<return%> with expression, in function returning void");
}
else
Index: testsuite/gcc.dg/Wreturn-type3.c
===================================================================
--- testsuite/gcc.dg/Wreturn-type3.c (revision 0)
+++ testsuite/gcc.dg/Wreturn-type3.c (revision 0)
@@ -0,0 +1,6 @@
+/* PR c/48116 */
+/* { dg-do compile } */
+/* { dg-options "-Wreturn-type" } */
+
+static void f() {}
+static void g() { return f(); } /* { dg-warning "forbids .return" "missing return" } */