This is the mail archive of the
`fortran@gcc.gnu.org`
mailing list for the GNU Fortran project.

Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|

Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |

Other format: | [Raw text] |

*From*: Paul Thomas <paulthomas2 at wanadoo dot fr>*To*: Fortran List <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>*Date*: Tue, 21 Nov 2006 09:44:29 +0100*Subject*: [Patch, fortran] PR29821 - Failure to resolve variable parameter array sections

PR fortran/29821 * resolve.c (resolve_operator): Only return result of gfc_simplify_expr if expression is constant.

PR fortran/29821 * gfortran.dg/parameter_array_section_1.f90: New test.

Index: gcc/fortran/resolve.c =================================================================== *** gcc/fortran/resolve.c (revision 118704) --- gcc/fortran/resolve.c (working copy) *************** resolve_operator (gfc_expr * e) *** 2199,2205 **** /* Attempt to simplify the expression. */ if (t == SUCCESS) ! t = gfc_simplify_expr (e, 0); return t; bad_op: --- 2199,2212 ---- /* Attempt to simplify the expression. */ if (t == SUCCESS) ! { ! 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: Index: gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 =================================================================== *** gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 (revision 0) --- gcc/testsuite/gfortran.dg/parameter_array_section_1.f90 (revision 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" } }

2006-11-21 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-11-21 Paul Thomas <pault@gcc.gnu.org> PR fortran/29821 * gfortran.dg/parameter_array_section_1.f90: New test.

**Follow-Ups**:

Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|

Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |