http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60191

--- Comment #9 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
Hmm,

I debugged a bit and found this:

the problem starts in gfc_get_function_type
it is first called on sym->name = "make_real",
and then recursively again on the same sym.
So this is a recursive_type.

The first call returns a
build_function_type_vec (with full parameter list)

But the recursive call returns a 
build_varargs_function_type_vec (with a shorter parameter list)

The problem is that these declarations are not identical:

So in the case of arm with --float-abi=hard this has
a somewhat surprising effect:

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.

However that may well be different for other targets,
for instance, pass the declared parameters in registers,
and pass everything after "..." on stack.

Reply via email to