http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60191
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code CC| |burnus at gcc dot gnu.org --- Comment #10 from Tobias Burnus <burnus at gcc dot gnu.org> --- (In reply to Bernd Edlinger from comment #9) > Varargs functions return a float result in r0 > Normal functions returns a float result in s0. > > If there were float arguments they would not be passed > on FPU-Registers for varargs functions, but because fortran > passes every in-parameter by reference that is not visible. That sounds difficult to fix. gfortran currently generates when it does not know the explicit interface something like: float funct(...) which for normal functions can be updated via the use of the function a = funct(1.0) ! => one argument of type real. [This updated of the interface base on the usage is not yet implemented and some PR exists for this; I think it is PR44471.] The problem is with procedure pointers of the form procedure(real), pointer :: ptr Those can point to any function returning a "real" - and one can have different ones at different places in the program. - I have no idea how to solve this. [Note: Fortran does not support variadic arguments.] [Side note: Fortran also permits to use "procedure(make_real),pointer", which provides the proper interface.]