From 9fb2e10d0cf939b41bdc097c4b2cc0aff553a92e Mon Sep 17 00:00:00 2001 From: pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Mon, 4 Dec 2006 19:30:33 +0000 Subject: [PATCH] 2006-12-04 Paul Thomas <pault@gcc.gnu.org> PR fortran/29821 * resolve.c (resolve_operator): Only return result of gfc_simplify_expr if expression is constant. 2006-12-04 Paul Thomas <pault@gcc.gnu.org> PR fortran/29821 * gfortran.dg/parameter_array_section_1.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119504 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 5dad6776199d..2ce1ec667f66 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2006-12-04 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/29821 + * resolve.c (resolve_operator): Only return result of + gfc_simplify_expr if expression is constant. + 2006-12-04 Paul Thomas <pault@gcc.gnu.org> PR fortran/29916 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 75a6ca31b8f5..e31ecbd5909e 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 0d558084d4a1..a0c4f78d2277 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-12-04 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/29821 + * gfortran.dg/parameter_array_section_1.f90: New test. + 2006-12-04 Mark Mitchell <mark@codesourcery.com> 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 000000000000..6c6959332625 --- /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 <anlauf@gmx.de> +! +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" } } -- GitLab