https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85448
Bug ID: 85448
Summary: the compiler selects the wrong subroutine because of
bind(c,name=...)
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: francois.jacq at irsn dot fr
Target Milestone: ---
In the following example, the subroutine c_open of the module m2, which should
call the subroutine odopen of the module m1, calls itself instead...
Tested with gcc 4.9.2 , 5.3.0, 6.3.0
result :
dev005{bug} 114 : gfortran -c m1.f90 m2.f90
dev005{bug} 114 : gcc main.c *.o -lgfortran
dev005{bug} 114 : ./a.out
c_odopen
c_odopen
c_odopen
...
module m1
implicit none
contains
subroutine odopen(unit)
integer,intent(out) :: unit
write(*,*) 'odopen'
unit=8
end subroutine
end module
module m2
use iso_c_binding
use m1
implicit none
contains
subroutine c_odopen(unit) bind(c,name="odopen")
integer(c_int),intent(out) :: unit
write(*,*) 'c_odopen'
call odopen(unit)
end subroutine
end module
#include <stdio.h>
void odopen(int*);
int main(){
int unit;
odopen(&unit);
printf("unit=%d \n",unit);
return 0;
}