re PR fortran/71203 (ICE in add_init_expr_to_sym, at fortran/decl.c:1512 and :1564)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 9 Mar 2019 14:10:17 +0000 (14:10 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 9 Mar 2019 14:10:17 +0000 (14:10 +0000)
2019-03-09  Thomas König  <tkoenig@gcc.gnu.org>

PR fortran/71203
* decl.c (add_init_expr_to_sym):  Add shape if init has none.  Add
assert that it has to be an EXPR_ARRAY in this case.

2019-03-09  Thomas König  <tkoenig@gcc.gnu.org>

PR fortran/71203
* gfortran.dg/array_simplify_3.f90: New test case.

From-SVN: r269526

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/array_simplify_3.f90 [new file with mode: 0644]

index 2840368..48ab06b 100644 (file)
@@ -1,3 +1,9 @@
+2019-03-09  Thomas König  <tkoenig@gcc.gnu.org>
+
+       PR fortran/71203
+       * decl.c (add_init_expr_to_sym):  Add shape if init has none.  Add
+       asserts that it has to be an EXPR_ARRAY in this case.
+
 2019-03-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR other/80058
index 3c8c5ff..31c7fb6 100644 (file)
@@ -1983,8 +1983,14 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
              return false;
            }
 
-         /* Shape should be present, we get an initialization expression.  */
-         gcc_assert (init->shape);
+         /* The shape may be NULL for EXPR_ARRAY, set it.  */
+         if (init->shape == NULL)
+           {
+             gcc_assert (init->expr_type == EXPR_ARRAY);
+             init->shape = gfc_get_shape (1);
+             if (!gfc_array_size (init, &init->shape[0]))
+                 gfc_internal_error ("gfc_array_size failed");
+           }
 
          for (dim = 0; dim < sym->as->rank; ++dim)
            {
index 6b131cb..d100f1b 100644 (file)
@@ -1,3 +1,8 @@
+2019-03-09  Thomas König  <tkoenig@gcc.gnu.org>
+
+       PR fortran/71203
+       * gfortran.dg/array_simplify_3.f90: New test case.
+
 2019-03-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/88568
diff --git a/gcc/testsuite/gfortran.dg/array_simplify_3.f90 b/gcc/testsuite/gfortran.dg/array_simplify_3.f90
new file mode 100644 (file)
index 0000000..31183b0
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do  run }
+! PR 71203 - this used to ICE
+program p
+   integer :: i
+   integer, parameter :: x(2) = 0
+   integer, parameter :: y(*) = [(x(i:i), i=1,2)]
+   if (size(y,1) /= 2) stop 1
+   if (any(y /= 0)) stop 2
+end