From 4bb91707a857eebd6b9357da7fabcec87a942340 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Sun, 12 Feb 2017 16:10:22 +0000 Subject: re PR fortran/65542 (SPREAD intrinsic incorrectly accepted in initialization expressions with -std=f95) 2017-02-12 Thomas Koenig PR fortran/65542 * intrinsic.c (gfc_intrinsic_func_interface): Return an error for -std=f95 for disallowed transformational functions in initialization expressions. 2017-02-12 Thomas Koenig PR fortran/65542 * gfortran.dg/spread_init_expr_2.f90: New test case. From-SVN: r245376 --- gcc/fortran/intrinsic.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'gcc/fortran/intrinsic.c') diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index e059a31..923572d 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -4680,6 +4680,27 @@ gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag) return MATCH_ERROR; } + /* F95, 7.1.6.1: Only transformational functions REPEAT, RESHAPE, + SELECTED_INT_KIND, SELECTED_REAL_KIND, TRANSFER, and TRIM are allowed in + initialization expressions. */ + + if (gfc_init_expr_flag && isym->transformational) + { + gfc_isym_id id = isym->id; + if (id != GFC_ISYM_REPEAT && id != GFC_ISYM_RESHAPE + && id != GFC_ISYM_SI_KIND && id != GFC_ISYM_SR_KIND + && id != GFC_ISYM_TRANSFER && id != GFC_ISYM_TRIM + && !gfc_notify_std (GFC_STD_F2003, "Transformational function %qs " + "at %L is invalid in an initialization " + "expression", name, &expr->where)) + { + if (!error_flag) + gfc_pop_suppress_errors (); + + return MATCH_ERROR; + } + } + gfc_current_intrinsic_where = &expr->where; /* Bypass the generic list for min, max and ISO_C_Binding's c_loc. */ -- cgit v1.1