From dd5ecf415546bfcd359c5f6dc7500fe7cc319593 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Mon, 4 Dec 2006 19:30:33 +0000 Subject: [PATCH] [multiple changes] 2006-12-04 Paul Thomas PR fortran/29821 * resolve.c (resolve_operator): Only return result of gfc_simplify_expr if expression is constant. 2006-12-04 Paul Thomas PR fortran/29821 * gfortran.dg/parameter_array_section_1.f90: New test. From-SVN: r119504 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/resolve.c | 9 ++++++- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/parameter_array_section_1.f90 | 24 +++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5dad6776199..2ce1ec667f6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2006-12-04 Paul Thomas + + PR fortran/29821 + * resolve.c (resolve_operator): Only return result of + gfc_simplify_expr if expression is constant. + 2006-12-04 Paul Thomas PR fortran/29916 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 75a6ca31b8f..e31ecbd5909 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2191,7 +2191,14 @@ resolve_operator (gfc_expr * e) /* Attempt to simplify the expression. */ if (t == SUCCESS) - t = gfc_simplify_expr (e, 0); + { + t = gfc_simplify_expr (e, 0); + /* Some calls do not succeed in simplification and return FAILURE + even though there is no error; eg. variable references to + PARAMETER arrays. */ + if (!gfc_is_constant_expr (e)) + t = SUCCESS; + } return t; bad_op: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0d558084d4a..a0c4f78d227 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-12-04 Paul Thomas + + PR fortran/29821 + * gfortran.dg/parameter_array_section_1.f90: New test. + 2006-12-04 Mark Mitchell PR c++/29733 diff --git a/gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 b/gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 new file mode 100644 index 00000000000..6c695933262 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! Tests the fix for PR29821, which was due to failure to simplify the +! array section, since the section is not constant, provoking failure +! to resolve the argument of SUM and therefore to resolve SUM itself. +! +! Contributed by Harald Anlauf +! +module gfcbug45 + implicit none +contains + subroutine foo + real, external :: mysum + integer :: i + real :: a + real, parameter :: eps(2) = (/ 1, 99 /) + i = 1 + a = sum (eps(i:i+1) * eps) + print *, a + end subroutine foo +end module gfcbug45 + use gfcbug45 + call foo +end +! { dg-final { cleanup-modules "gfcbug45" } }