diff options
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r-- | gcc/fortran/check.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index f2c4272..dca97cb 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -240,6 +240,14 @@ logical_array_check (gfc_expr *array, int n) static gfc_try array_check (gfc_expr *e, int n) { + if (e->ts.type == BT_CLASS + && CLASS_DATA (e)->attr.dimension + && CLASS_DATA (e)->as->rank) + { + gfc_add_class_array_ref (e); + return SUCCESS; + } + if (e->rank != 0) return SUCCESS; @@ -554,6 +562,9 @@ dim_corank_check (gfc_expr *dim, gfc_expr *array) if (dim->expr_type != EXPR_CONSTANT) return SUCCESS; + + if (array->ts.type == BT_CLASS) + return SUCCESS; corank = gfc_get_corank (array); @@ -587,6 +598,9 @@ dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed) if (dim->expr_type != EXPR_CONSTANT) return SUCCESS; + if (array->ts.type == BT_CLASS) + return SUCCESS; + if (array->expr_type == EXPR_FUNCTION && array->value.function.isym && array->value.function.isym->id == GFC_ISYM_SPREAD) rank = array->rank + 1; |