https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55976

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I thought this should be as simple as adding OPT_Wreturn_type to the relevant
warnings in c_finish_return in gcc/c/typeck-c.c

But it seems to be more complicated. In C89 mode the "does not" case is
actually controlled by -pedantic (and -pedantic-errors) and the "does" case is
controlled by -Wreturn-type. In C99 and later modes both diagnostics are
controlled by -pedantic.

So with current GCC and the default -std=gnu11 you do get two diagnostics:

ret.c: In function ‘t’:
ret.c:1:20: warning: ‘return’ with a value, in function returning void
 void t () { return 1; } /* does not error */
                    ^
ret.c:1:6: note: declared here
 void t () { return 1; } /* does not error */
      ^
ret.c: In function ‘b’:
ret.c:2:12: warning: ‘return’ with no value, in function returning non-void
 int b () { return; }    /* does */
            ^~~~~~
ret.c:2:5: note: declared here
 int b () { return; }    /* does */
     ^

-Werror=return-type doesn't affect either of them, but -pedantic-errors does.

Reply via email to