aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/iresolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/iresolve.c')
-rw-r--r--gcc/fortran/iresolve.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c
index 53338dd..2a44a0a 100644
--- a/gcc/fortran/iresolve.c
+++ b/gcc/fortran/iresolve.c
@@ -1352,16 +1352,31 @@ gfc_resolve_ior (gfc_expr *f, gfc_expr *i, gfc_expr *j)
void
-gfc_resolve_index_func (gfc_expr *f, gfc_expr *str,
- gfc_expr *sub_str ATTRIBUTE_UNUSED, gfc_expr *back,
- gfc_expr *kind)
+gfc_resolve_index_func (gfc_expr *f, gfc_actual_arglist *a)
{
gfc_typespec ts;
gfc_clear_ts (&ts);
+ gfc_expr *str, *back, *kind;
+ gfc_actual_arglist *a_sub_str, *a_back, *a_kind;
+
+ if (f->do_not_resolve_again)
+ return;
+
+ a_sub_str = a->next;
+ a_back = a_sub_str->next;
+ a_kind = a_back->next;
+
+ str = a->expr;
+ back = a_back->expr;
+ kind = a_kind->expr;
f->ts.type = BT_INTEGER;
if (kind)
- f->ts.kind = mpz_get_si (kind->value.integer);
+ {
+ f->ts.kind = mpz_get_si ((kind)->value.integer);
+ a_back->next = NULL;
+ gfc_free_actual_arglist (a_kind);
+ }
else
f->ts.kind = gfc_default_integer_kind;
@@ -1376,6 +1391,8 @@ gfc_resolve_index_func (gfc_expr *f, gfc_expr *str,
f->value.function.name
= gfc_get_string ("__index_%d_i%d", str->ts.kind, f->ts.kind);
+
+ f->do_not_resolve_again = 1;
}