aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2019-03-09 14:10:17 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2019-03-09 14:10:17 +0000
commit8ed5ae524ae350a50a82630342ef9578591090a5 (patch)
tree5378b67d3a528243b31abcd67acffdc1a2766a28 /gcc
parent3568d2d5fa77f5c8798c1dca46b1f738d2097202 (diff)
downloadgcc-8ed5ae524ae350a50a82630342ef9578591090a5.zip
gcc-8ed5ae524ae350a50a82630342ef9578591090a5.tar.gz
gcc-8ed5ae524ae350a50a82630342ef9578591090a5.tar.bz2
re PR fortran/71203 (ICE in add_init_expr_to_sym, at fortran/decl.c:1512 and :1564)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/decl.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/array_simplify_3.f909
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2840368..48ab06b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 3c8c5ff..31c7fb6 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -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)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6b131cb..d100f1b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..31183b0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/array_simplify_3.f90
@@ -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