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.

Reply via email to