diff options
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r-- | gcc/fortran/check.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 15278f4..6ca5246 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -378,6 +378,18 @@ identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi) return ret; } +/* Error return for transformational intrinsics not allowed in + initalization expressions. */ + +static try +non_init_transformational (void) +{ + gfc_error ("transformational intrinsic '%s' at %L is not permitted " + "in an initialization expression", gfc_current_intrinsic, + gfc_current_intrinsic_where); + return FAILURE; +} + /***** Check functions *****/ /* Check subroutine suitable for intrinsics taking a real argument and @@ -439,6 +451,9 @@ gfc_check_all_any (gfc_expr * mask, gfc_expr * dim) if (dim_check (dim, 1, 1) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -724,6 +739,9 @@ gfc_check_count (gfc_expr * mask, gfc_expr * dim) if (dim_check (dim, 1, 1) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -747,6 +765,9 @@ gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim) if (dim_check (dim, 2, 1) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -848,6 +869,9 @@ gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b) return FAILURE; } + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -883,6 +907,9 @@ gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary, if (dim_check (dim, 1, 1) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -1545,6 +1572,9 @@ gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b) return FAILURE; } + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -1605,6 +1635,9 @@ gfc_check_minloc_maxloc (gfc_actual_arglist * ap) return FAILURE; } + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -1673,6 +1706,9 @@ gfc_check_minval_maxval (gfc_actual_arglist * ap) || array_check (ap->expr, 0) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return check_reduction (ap); } @@ -1684,6 +1720,9 @@ gfc_check_product_sum (gfc_actual_arglist * ap) || array_check (ap->expr, 0) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return check_reduction (ap); } @@ -1781,6 +1820,9 @@ gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector) /* TODO: More constraints here. */ } + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -2152,6 +2194,9 @@ gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies) if (scalar_check (ncopies, 2) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -2367,6 +2412,9 @@ gfc_check_transpose (gfc_expr * matrix) if (rank_check (matrix, 0, 2) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } @@ -2405,6 +2453,9 @@ gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field) if (same_type_check (vector, 0, field, 2) == FAILURE) return FAILURE; + if (gfc_init_expr) + return non_init_transformational (); + return SUCCESS; } |