One should make sure that the way arguments are passed by reference are always consistent. At least for gfortran this seems to be the case. See
https://gcc.gnu.org/onlinedocs/gfortran/Argument-passing-conventions.html
https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
https://thinkingeek.com/2017/01/14/gfortran-array-descriptor/
Subroutines eat pointers with references to data. Array types are specified uniquely via structs. Function return values of primitive types are by value, and as a pointer in more complicated types. Nowadays (post-g77 and f2c) C99 COMPLEX datatype is used.
One should make sure that the way arguments are passed by reference are always consistent. At least for gfortran this seems to be the case. See
https://gcc.gnu.org/onlinedocs/gfortran/Argument-passing-conventions.html
https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
https://thinkingeek.com/2017/01/14/gfortran-array-descriptor/
Subroutines eat pointers with references to data. Array types are specified uniquely via structs. Function return values of primitive types are by value, and as a pointer in more complicated types. Nowadays (post-g77 and f2c) C99 COMPLEX datatype is used.