On Tue, Dec 05, 2023 at 04:38:55AM +0100, Kevin Kofler via devel wrote:
Florian Weimer wrote:
> The final patches for GCC 14 are currently under upstream review and
> should land very soon. Earlier, I had received feedback that the larger
> community desires just one transition, so we end up with the following
> warnings which turn into errors by default:
>
> -Wimplicit-function-declaration
> -Wimplicit-int
> -Wint-conversion
> -Wreturn-mismatch (new, previously part of -Wreturn-types)
> -Wdeclaration-missing-parameter-type (new, previously unnamed)
> -Wincompatible-pointer-types
>
> Only the first two were covered in the initial Fedora conversion work.
As much as I understand the point of -Werror=implicit-function-declaration
(since implicit function declarations can cause several subtle bugs), and
implicit int is obscure enough for its removal to not be a big problem (even
though its potential for causing bugs is much lower), as much I have to
wonder about the others. Especially the incompatible pointer types sound
more like nitpicking than actual bugs (though I guess strict aliasing can
cause issues with those, but then I would expect to see -Wstrict-aliasing
warnings).
Look at the gimp case, where a function prototype was expecting double *
argument but caller was calling it with address of float.
void foo (double *);
void
bar ()
{
float f = 5.0f;
foo (&f);
}
While this resulted in a warning even without -Wall, clearly nobody noticed
until this was made an error:
file-tiff-load.c:1372:56: warning: passing argument 2 of ‘gimp_image_get_resolution’ from
incompatible pointer type [-Wincompatible-pointer-types]
1372 | gimp_image_get_resolution (*image, &xres, &yres);
| ^~~~~
| |
| gfloat * {aka float *}
In file included from ../../libgimp/gimp_pdb_headers.h:55,
from ../../libgimp/gimp.h:66,
from file-tiff-load.c:52:
../../libgimp/gimpimage_pdb.h:179:86: note: expected ‘gdouble *’ {aka ‘double *’} but
argument is of type ‘gfloat *’ {aka ‘float *’}
179 | gdouble
*xresolution,
|
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
file-tiff-load.c:1372:63: warning: passing argument 3 of ‘gimp_image_get_resolution’ from
incompatible pointer type [-Wincompatible-pointer-types]
1372 | gimp_image_get_resolution (*image, &xres, &yres);
| ^~~~~
| |
| gfloat * {aka float
*}
../../libgimp/gimpimage_pdb.h:180:86: note: expected ‘gdouble *’ {aka ‘double *’} but
argument is of type ‘gfloat *’ {aka ‘float *’}
180 | gdouble
*yresolution);
|
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
Jakub