https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92361

--- Comment #3 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Fortran has no concept of a varargs call. It is an error to call a procedure
with
a different number or type of arguments (unless there is an explicit interface
and the dummy arguments are optional or ...). Such errors are only poorly
detected by gfortran prior to 10.

So, the code is erroneous. Does it matter?

For. x86_64, not so much. The only difference there is that one register is set
to
the number of floating point values oassen in registers. For POWER, this is
different because of some red zone somewhere, I forget the details.

Before the fix, gfortran incorrectly called unknown procedures as taking
varargs, even though they were not compiled as such. This led to crashes
on POWER when the number of arguments became too big.

So, this fix means that the usage of calling a varargs functuon from Fortran
will not work any longer, at least when using an ABI where it makes a
difference.

The solution is to fix the code to call non-vararg C functuons, preferably
using standard Fortran C interop features.

If you compile the code with current trunk, and the calls are in a single file,
you should get some error messages which hopefully are useful in spotting the
problems.

Reply via email to