https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102079
Bug ID: 102079 Summary: Misleading -Wlto-type-mismatch warning on wrong float type to C function Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: rimvydas.jas at gmail dot com Target Milestone: --- $ cat bar.c #include <stddef.h> void bar_ (char *cdname, /*float*/ double *pkey, char *cdfile, size_t cdname_len, size_t cdfile_len) { }; $ cat foo.f90 program test call foo('start','loo',13.) end program subroutine foo(cdname,cdfile,pkey) implicit none character(len=*) :: cdname,cdfile real :: pkey call bar(cdname,pkey,cdfile) end subroutine $ gcc -flto -c bar.c $ gfortran -Wall -Wextra -flto foo.f90 bar.o foo.f90:9:28: warning: type of 'bar' does not match original declaration [-Wlto-type-mismatch] 9 | call bar(cdname,pkey,cdfile) | ^ bar.c:2:6: note: type mismatch in parameter 4 2 | void bar_ (char *cdname, /*float*/ double *pkey, char *cdfile, size_t cdname_len, size_t cdfile_len) { }; | ^ bar.c:2:6: note: type 'size_t' should match type 'long int' bar.c:2:6: note: 'bar_' was previously declared here bar.c:2:6: note: code may be misoptimized unless '-fno-strict-aliasing' is used Actual hard error is typo in bar.c for "float *pkey" 2nd argument and not a first hidden argument for first character array length.