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

Reply via email to