------- Comment #2 from burnus at gcc dot gnu dot org 2007-02-21 07:33 ------- (In reply to comment #0) > The attached test code using a generic interface block produces wrong output > when compiled with gfortran, and works fine with pgf90.
I think both compilers are right; or to be more precise: The program is wrong/undefined. If one removes the INTERFACE blocks and puts the subroutines into below a CONTAINS in the main program, gfortran gives the following error: call adsorb(tsl, gamm, adwat, wsc, dime = ns, mode = 1) 1 Error: Type/rank mismatch in argument 'te' at (1) The actual argument "tsl" is REAL, DIMENSION(10); the dummy argument "te" is REAL, INTENT(IN) :: gam, te Analogously for gam(m) and adwat/adsor. Thus: The compiler expects in the main program that it has to pass an array, but the routine only accepts a single real. What happens in your program is now highly platform and compiler dependent: pgf90 seems to set all values to "0.5104298" (but I wouldn't rely on this happening all the times), gfortran has seemingly "0.5104298" in adwat(10) only. (The rest is uninitialized.) And ifort/g95 have for the whole array adwat(:) uninitialized values. By the way, NAG f95 detects the interface/procedure mismatch also for the original program as the interface and the subroutines are in the same file. This same-file error detection is also planed for gfortran. -- burnus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |burnus at gcc dot gnu dot | |org Status|UNCONFIRMED |RESOLVED Resolution| |INVALID http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30902