diff options
Diffstat (limited to 'gcc/fortran/iresolve.c')
-rw-r--r-- | gcc/fortran/iresolve.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 63741f2..4ded73d 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -1231,6 +1231,19 @@ gfc_resolve_maxloc (gfc_expr *f, gfc_expr *array, gfc_expr *dim, else name = "maxloc"; + /* If the rank of the function is nonzero, we are going to call + a library function. Coerce the argument to one of the + existing library functions for this case. */ + + if (f->rank != 0 && array->ts.type == BT_INTEGER + && array->ts.kind < gfc_default_integer_kind) + { + gfc_typespec ts; + ts.type = BT_INTEGER; + ts.kind = gfc_default_integer_kind; + gfc_convert_type_warn (array, &ts, 2, 0); + } + f->value.function.name = gfc_get_string (PREFIX ("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind, gfc_type_letter (array->ts.type), array->ts.kind); @@ -1385,6 +1398,19 @@ gfc_resolve_minloc (gfc_expr *f, gfc_expr *array, gfc_expr *dim, else name = "minloc"; + /* If the rank of the function is nonzero, we are going to call + a library function. Coerce the argument to one of the + existing library functions for this case. */ + + if (f->rank != 0 && array->ts.type == BT_INTEGER + && array->ts.kind < gfc_default_integer_kind) + { + gfc_typespec ts; + ts.type = BT_INTEGER; + ts.kind = gfc_default_integer_kind; + gfc_convert_type_warn (array, &ts, 2, 0); + } + f->value.function.name = gfc_get_string (PREFIX ("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind, gfc_type_letter (array->ts.type), array->ts.kind); |