PR c/48116. Botstrapped and tested on x86_64-pc-linux-gnu.
gcc/ChangeLog: * c/c-typeck.c (c_finish_return): emit warning about return with a void expression in a function returning void if warn_return_type. gcc/testsuite/ChangeLog: * gcc.dg/Wreturn-type3.c: new test. --- gcc/c/c-typeck.c | 4 ++++ gcc/testsuite/gcc.dg/Wreturn-type3.c | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/Wreturn-type3.c diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index 1520c20..8ac6cd4 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -9700,6 +9700,10 @@ c_finish_return (location_t loc, tree retval, tree origtype) warned_here = pedwarn (xloc, 0, "%<return%> with a value, in function returning void"); + else if (warn_return_type) + warned_here = warning_at + (loc, OPT_Wreturn_type, + "%<return%> with expression, in function returning void"); else warned_here = pedwarn (xloc, OPT_Wpedantic, "ISO C forbids " diff --git a/gcc/testsuite/gcc.dg/Wreturn-type3.c b/gcc/testsuite/gcc.dg/Wreturn-type3.c new file mode 100644 index 0000000..e83c94b --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wreturn-type3.c @@ -0,0 +1,6 @@ +/* PR c/48116 */ +/* { dg-do compile } */ +/* { dg-options "-Wreturn-type" } */ + +void a() {} +void b() { return a(); } /* { dg-warning "return" "returning void" } */ -- 2.8.3