Segher Boessenkool <segher@xxxxxxxxxxxxxxxxxxx> writes: > On Tue, May 18, 2021 at 07:45:14PM -0500, Segher Boessenkool wrote: >> On Wed, May 19, 2021 at 10:26:22AM +1000, Michael Ellerman wrote: >> > Guenter Roeck <linux@xxxxxxxxxxxx> writes: >> > > Ah, sorry. I wasn't aware that the following is valid C code >> > > >> > > void f1() >> > > { >> > > return f2(); >> > > ^^^^^^ >> > > } >> > > >> > > as long as f2() is void as well. Confusing, but we live and learn. >> > >> > It might be valid, but it's still bad IMHO. >> > >> > It's confusing to readers, and serves no useful purpose. >> >> And it actually explicitly is undefined behaviour in C90 already >> (3.6.6.4 in C90, 6.8.6.4 in C99 and later). We use gnu89, which presumably does not make it UB. > ... but there is a GCC extension that allows this by default: > <https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wreturn-type> > For C only, warn about a 'return' statement with an expression in a > function whose return type is 'void', unless the expression type is > also 'void'. As a GNU extension, the latter case is accepted > without a warning unless '-Wpedantic' is used. There's no chance we'll ever enable -Wpedantic, so I guess it's allowed for practical purposes. I guess clang must accept it too or we'd be seeing warnings from it. cheers