2009-02-26 Paul Thomas <pault@gcc.gnu.org>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Feb 2009 06:23:42 +0000 (06:23 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Feb 2009 06:23:42 +0000 (06:23 +0000)
PR fortran/39292
* trans-array.c (gfc_conv_array_initializer): Convert all
expressions rather than ICEing.

2009-02-26  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/39292
* gfortran.dg/initialization_22.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144444 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/initialization_22.f90 [new file with mode: 0644]

index 57ad11b..48c6c34 100644 (file)
@@ -1,3 +1,9 @@
+2009-02-26  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/39292
+       * trans-array.c (gfc_conv_array_initializer): Convert all
+       expressions rather than ICEing.
+
 2008-02-21  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/38914
index 2b23f15..6c62350 100644 (file)
@@ -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;
index ab3f4d8..6766c5e 100644 (file)
@@ -1,3 +1,8 @@
+2009-02-26  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/39292
+       * gfortran.dg/initialization_22.f90: New test.
+
 2008-02-25  H.J. Lu  <hongjiu.lu@intel.com>
 
        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 (file)
index 0000000..f788109
--- /dev/null
@@ -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 <rguenth@gcc.gnu.org>
+!
+  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