https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61615
Dominique d'Humieres <dominiq at lps dot ens.fr> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |WAITING Last reconfirmed| |2014-07-12 Ever confirmed|0 |1 --- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- If I use Fortran pointers as below, I get the "expected" output MODULE foo USE iso_c_binding IMPLICIT NONE INTERFACE bar MODULE PROCEDURE bar_s MODULE PROCEDURE bar_a1d END INTERFACE bar CONTAINS SUBROUTINE bar_s(a, b) real, pointer :: a, b WRITE (0, *) 'in bar_s' END SUBROUTINE bar_s SUBROUTINE bar_a1d(a, b) real, pointer :: a(:), b(:) WRITE (0, *) 'in bar_a1d' END SUBROUTINE bar_a1d END MODULE foo PROGRAM cptr_array_vs_scalar_arg USE foo USE iso_c_binding IMPLICIT NONE INTEGER, TARGET :: i real, pointer :: a, b real, pointer :: c(:), d(:) CALL bar(a, b) CALL bar(c, d) END PROGRAM cptr_array_vs_scalar_arg I don't understand how the code in comment 0 can distinguish bar_s from bar_a1d based on the variable locations in memory, nor why it chooses bar_a1d.