https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115310
--- Comment #3 from Florian Weimer <fw at gcc dot gnu.org> ---
This is just following the previous GCC behavior. For example, with GCC 11:
$ gcc -S -Werror=return-type -std=gnu89 t.c
t.c:1:1: error: return type defaults to ‘int’ [-Werror=return-type]
1 | main () { return 0; }
| ^~~~
I'm not sure how this is a problem in practice.
Using -Werror=return-type at the distribution level is … problematic. It's why
we split -Werror=return-mismatch from it, and only enabled the latter by
default in GCC 14.
(In reply to Richard Biener from comment #1)
> It's really ugly to force old code to use -fpermissive instead of the
> much cleaner -std=gnu89 just because formerly, with the default of
> newer -std, we only had a warning for the implicit int while with
> -std=gnu89 we now get an error for it. Did I say I dislike -fpermissive?
> (which also gets you diagnostics for older compilers, so packages building
> in multiple distributions get more difficult to maintain)
We added -fpermissive because we didn't want to change the meaning of
-std=gnu89. You can use it to get old sources to compile. But of course if you
use -Werror=… options at the same time, these old sources might not compile.
And that was true for previous GCC versions as well.