https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85448
--- Comment #2 from francois.jacq at irsn dot fr ---
(In reply to kargl from comment #1)
> (In reply to francois.jacq from comment #0)
> > 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...
>
> The behavior you see is correct. There is no 'c_odopen'
> in the m2.o file. You gave it the binding name 'odopen'.
> You have created a recursive call.
No the behavior is not correct : at least, the compiler should issue an error
message precising that there is a name conflict because odopen is also
accessible via the instruction use.
Another variant which clearly shows that the compiler behavior is wrong :
module m2
use iso_c_binding
use m1, only : odopen_m1 => odopen
implicit none
contains
subroutine c_odopen(unit) bind(c,name="odopen")
integer(c_int),intent(out) :: unit
write(*,*) 'c_odopen'
call odopen_m1(unit)
end subroutine
end module
With this variant, I get again the same behavior : c_odopen is called
recursively