From df1c87913c623004b0ecf24ea37874d9addaa8c9 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Tue, 5 Nov 2013 20:02:43 +0000 Subject: [PATCH] re PR fortran/58989 (internal compiler error when using reshape function) 2013-11-05 Steven G. Kargl PR fortran/58989 * check.c (gfc_check_reshape): ensure that shape is a constant expression. 2013-11-05 Steven G. Kargl PR fortran/58989 * gfortran.dg/reshape_6.f90: New test. From-SVN: r204419 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/check.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/reshape_6.f90 | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/reshape_6.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 16703f6..47b9383 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-11-05 Steven G. Kargl + + PR fortran/58989 + * check.c (gfc_check_reshape): ensure that shape is a constant + expression. + 2013-11-05 Tobias Burnus * lang.opt (fopenmp-simd): New option. diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 758639e..1508c74 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -3277,7 +3277,7 @@ gfc_check_reshape (gfc_expr *source, gfc_expr *shape, "than %d elements", &shape->where, GFC_MAX_DIMENSIONS); return false; } - else if (shape->expr_type == EXPR_ARRAY) + else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape)) { gfc_expr *e; int i, extent; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a348d7e..2145503 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-11-05 Steven G. Kargl + + PR fortran/58989 + * gfortran.dg/reshape_6.f90: New test. + 2013-10-05 Jeff Law * gcc.dg/pr38984.c: Add -fno-isolate-erroneous-paths. diff --git a/gcc/testsuite/gfortran.dg/reshape_6.f90 b/gcc/testsuite/gfortran.dg/reshape_6.f90 new file mode 100644 index 0000000..149f31e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/reshape_6.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/58989 +! +program test + + real(8), dimension(4,4) :: fluxes + real(8), dimension(2,2,2,2) :: f + integer, dimension(3) :: dmmy + integer, parameter :: indx(4)=(/2,2,2,2/) + + fluxes = 1 + + dmmy = (/2,2,2/) + + f = reshape(fluxes,(/dmmy,2/)) ! Caused an ICE + f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected + f = reshape(fluxes,indx) ! Works as expected + +end program test -- 2.7.4