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.