Bernd Schmidt wrote:
There's at least one more such problem with gfortran, which I'm having
a harder time debugging. It occurs in
gfortran.fortran-torture/compile/mloc.f90
That's minloc/maxloc, which takes three arguments on the Fortran side:
An array, optionally a dimension ("dim") and optionally an array-valued
mask (same shape as "array").
while the actual library function (and the call to it) only has three
arguments:
void
mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
gfc_array_r4 * const restrict array,
gfc_array_l1 * const restrict mask)
The decl is constructed by gfc_get_function_type. It seems to think
there's one extra parameter named "dim" between "array" and "mask".
There are two functions groups called with mask, cf. iresolve.c's
gfc_resolve_minloc. Namely, without dim "mmin0_<kind>_<type>" and with
dim "mmin1_<kind>_<type>". – The latter takes "dim" as additional argument.
Thus, for mmin1_* the generated decl is fine, for mmin0_ is is not. I do
not immediately see where the "dim" argument is skipped – but some
similar special-case handling would then be also needed for the function
declaration.
Tobias