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.