aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/check.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r--gcc/fortran/check.c14
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;