On Wed, Apr 25, 2018 at 10:40 AM, Jonathan Wakely <jwak...@redhat.com> wrote: > On 25/04/18 14:53 +0100, Andrew Haley wrote: >> >> On 04/25/2018 01:23 PM, Jonathan Wakely wrote: >> >>> We enabled -Wreturn-type by default in GCC 8, so code using the >>> extension will get warnings even without -Wall now. Users might want >>> to use -Werror=return-type to ensure they aren't bitten by the new >>> optimizations that assume control never reaches the end of a >>> non-void function. >> >> >> But ISO C++ allows control to reach the end of main(), and >> automagically returns 0. I guess you didn't mean that, but your reply >> was confusing. >> >> N4659, Section 6.6.1 Para 5: >> >> If control flows off the end of the compound-statement of main, the >> effect is equivalent to a return with operand 0 (see also 18.3). > > > Yes, I should have said "never reaches the end of a non-void function > other than main". > > -Wreturn-type doesn't warn about flowing off the end of main, because > it's well-defined. There's definitely scope for confusion, because > -Wreturn-type gives the main function special treatment in two ways: > > * Unlike normal functions, flowing off the end of main doesn't warn, > because the standard defines what happens there. > > * Unlike normal functions, G++ allows omitting the return type of > main. > This is a non-standard extension to C++ (implicit int return types > are allowed by C89 but not by any version of C++). > > What I'm proposing for deprecation is the non-standard extension that > allows: > > main() { return 0; } > > More concretely, deprecating it for a few releases would allow us to > apply the attached patch at some point in the future, so that instead > of: > > rt.c:1:6: warning: ISO C++ forbids declaration of ‘main’ with no type > [-Wreturn-type] > main() { return 0; } > ^ > > We'd get: > > rt.c:1:6: error: ISO C++ forbids declaration of 'main' with no type > [-fpermissive] > main() { return 0; } > ^
I'm still not sure what the advantage is of changing the warning to an error, but I suppose I wouldn't object either. Jason