From: Paul Thomas Date: Thu, 26 Feb 2009 06:23:42 +0000 (+0000) Subject: re PR fortran/39292 (ICE in gfc_conv_array_initializer, at fortran/trans-array.c... X-Git-Tag: releases/gcc-4.4.0~429 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1cfed038a9cebb85d49e48958f6021b11372630;p=thirdparty%2Fgcc.git re PR fortran/39292 (ICE in gfc_conv_array_initializer, at fortran/trans-array.c:3884) 2009-02-26 Paul Thomas PR fortran/39292 * trans-array.c (gfc_conv_array_initializer): Convert all expressions rather than ICEing. 2009-02-26 Paul Thomas PR fortran/39292 * gfortran.dg/initialization_22.f90: New test. From-SVN: r144444 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 57ad11b3214a..48c6c3424a54 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-02-26 Paul Thomas + + PR fortran/39292 + * trans-array.c (gfc_conv_array_initializer): Convert all + expressions rather than ICEing. + 2008-02-21 Thomas Koenig PR fortran/38914 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 2b23f15cba4b..6c623504af84 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -4005,8 +4005,21 @@ gfc_conv_array_initializer (tree type, gfc_expr * expr) CONSTRUCTOR_APPEND_ELT (v, index, se.expr); break; + default: - gcc_unreachable (); + /* Catch those occasional beasts that do not simplify + for one reason or another, assuming that if they are + standard defying the frontend will catch them. */ + gfc_conv_expr (&se, c->expr); + if (range == NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + else + { + if (index != NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + CONSTRUCTOR_APPEND_ELT (v, range, se.expr); + } + break; } } break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ab3f4d8e0b7d..6766c5e0f5a7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-02-26 Paul Thomas + + PR fortran/39292 + * gfortran.dg/initialization_22.f90: New test. + 2008-02-25 H.J. Lu PR rtl-optimization/39241 diff --git a/gcc/testsuite/gfortran.dg/initialization_22.f90 b/gcc/testsuite/gfortran.dg/initialization_22.f90 new file mode 100644 index 000000000000..f788109e66ad --- /dev/null +++ b/gcc/testsuite/gfortran.dg/initialization_22.f90 @@ -0,0 +1,10 @@ +! { dg-do run } +! tests the fix for PR39292, where the intitialization expression +! did not simplify and caused an ICE in gfc_conv_array_initializer. +! +! Contributed by Richard Guenther +! + integer :: n + real, dimension(2) :: a = (/ ( (float(n))**(1.0), n=1,2) /) + if (any (a .ne. (/ ( (float(n))**(1.0), n=1,2) /))) call abort +end