From: Steven G. Kargl Date: Tue, 5 Nov 2013 20:02:43 +0000 (+0000) Subject: re PR fortran/58989 (internal compiler error when using reshape function) X-Git-Tag: upstream/12.2.0~66830 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=df1c87913c623004b0ecf24ea37874d9addaa8c9;p=platform%2Fupstream%2Fgcc.git 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 --- 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