On Mon, Feb 18, 2019 at 2:51 PM Richard Biener <richard.guent...@gmail.com> wrote: > The patch looks good to me. I wonder how the frontend handles > the 2nd call to doesntwork_p8 for > > program main > implicit none > character :: c > character(len=20) :: res, doesntwork_p8 > external doesntwork_p8 > c = 'o' > res = doesntwork_p8(c,1,2,3,4,5,6) > res = doesntwork_p8(1,2) > if (res /= 'foo') stop 3 > end program main > > at least I get no diagnostic and the patch suggests whatever call > gets there first determines the backend-decl and its type? At least > when I omit res = from the second call I get > > t.f:4:47: > > 4 | character(len=20) :: res, doesntwork_p8 > | 1 > ...... > 8 | call doesntwork_p8(1,2) > | > Error: ‘doesntwork_p8’ at (1) has a type, which is not consistent with > the CALL at (2) > > Does the Fortran standard say anything in how the above case should be > handled?
Without actually checking, I'm pretty sure a procedure is either a function (something that returns a value) or a subroutine (does NOT return a value, like a void function in C), but not both (some of the intrinsics in gfortran can be called both as a function or a subroutine, but that's a gfortran-specific extension (inherited from g77, AFAIK), not part of the language, and only for some intrinsics that the compiler handles in a special way, not a generic user-defined procedure). So the example you show above is invalid. -- Janne Blomqvist