aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/data.c
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2016-12-14 12:52:09 +0100
committerAndre Vehreschild <vehre@gcc.gnu.org>2016-12-14 12:52:09 +0100
commiteb401400f59e4d1f28bbdc788c3234e0968081d7 (patch)
tree8a84929bf6cd9296cf8c3765d56781c6466033d9 /gcc/fortran/data.c
parente397febfb88c6cb7f72069057a7b8b12c5dfca06 (diff)
downloadgcc-eb401400f59e4d1f28bbdc788c3234e0968081d7.zip
gcc-eb401400f59e4d1f28bbdc788c3234e0968081d7.tar.gz
gcc-eb401400f59e4d1f28bbdc788c3234e0968081d7.tar.bz2
re PR fortran/78672 (Gfortran test suite failures with a sanitized compiler)
gcc/fortran/ChangeLog: 2016-12-14 Andre Vehreschild <vehre@gcc.gnu.org> PR fortran/78672 * array.c (gfc_find_array_ref): Add flag to return NULL when no ref is found instead of erroring out. * data.c (gfc_assign_data_value): Only constant expressions are valid for initializers. * gfortran.h: Reflect change of gfc_find_array_ref's signature. * interface.c (compare_actual_formal): Access the non-elemental array-ref. Prevent taking a REF_COMPONENT for a REF_ARRAY. Correct indentation. * module.c (load_omp_udrs): Clear typespec before reading into it. * trans-decl.c (gfc_build_qualified_array): Prevent accessing the array when it is a coarray. * trans-expr.c (gfc_conv_cst_int_power): Use wi::abs()-function instead of crutch preventing sanitizer's bickering here. * trans-stmt.c (gfc_trans_deallocate): Only get data-component when it is a descriptor-array here. From-SVN: r243647
Diffstat (limited to 'gcc/fortran/data.c')
-rw-r--r--gcc/fortran/data.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c
index 139ce88..ea19732 100644
--- a/gcc/fortran/data.c
+++ b/gcc/fortran/data.c
@@ -483,7 +483,10 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
if (ref || last_ts->type == BT_CHARACTER)
{
- if (lvalue->ts.u.cl->length == NULL && !(ref && ref->u.ss.length != NULL))
+ /* An initializer has to be constant. */
+ if (rvalue->expr_type != EXPR_CONSTANT
+ || (lvalue->ts.u.cl->length == NULL
+ && !(ref && ref->u.ss.length != NULL)))
return false;
expr = create_character_initializer (init, last_ts, ref, rvalue);
}