From abeab93869b150cb26b4267d14e3362dadb0a8be Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Thu, 11 Jun 2009 20:11:59 +0000 Subject: [PATCH] re PR fortran/40402 (Problem with data statement involving structure constructors containing non-initialisation expressions) 2009-06-11 Paul Thomas PR fortran/40402 * resolve.c (next_data_value): It is an error if the value is not constant. 2009-06-11 Paul Thomas PR fortran/40402 * gfortran.dg/data_value_1.f90: New test. From-SVN: r148396 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/resolve.c | 5 ++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/data_value_1.f90 | 14 ++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/data_value_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1a2f41b2456..2f0ff9dee8c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-06-11 Paul Thomas + + PR fortran/40402 + * resolve.c (next_data_value): It is an error if the value is + not constant. + 2009-06-11 Francois-Xavier Coudert PR fortran/38718 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 5bb38fec577..04e03cc659b 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9852,9 +9852,12 @@ values; static gfc_try next_data_value (void) { - while (mpz_cmp_ui (values.left, 0) == 0) { + if (!gfc_is_constant_expr (values.vnode->expr)) + gfc_error ("non-constant DATA value at %L", + &values.vnode->expr->where); + if (values.vnode->next == NULL) return FAILURE; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a36badabe4..d49243f41d5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-06-11 Paul Thomas + + PR fortran/40402 + * gfortran.dg/data_value_1.f90: New test. + 2009-06-11 Francois-Xavier Coudert PR testsuite/39831 diff --git a/gcc/testsuite/gfortran.dg/data_value_1.f90 b/gcc/testsuite/gfortran.dg/data_value_1.f90 new file mode 100644 index 00000000000..ea05a91d30d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/data_value_1.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! Test the fix for PR40402, in which it was not detected that X +! is not a constant and so the DATA statement did not have +! a constant value expression. +! +! Contributed by Philippe Marguinaud +! + TYPE POINT + REAL :: X + ENDTYPE + TYPE(POINT) :: P + DATA P / POINT(1.+X) / ! { dg-error "non-constant DATA value" } + print *, p + END