From 8ed5ae524ae350a50a82630342ef9578591090a5 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Sat, 9 Mar 2019 14:10:17 +0000 Subject: [PATCH] re PR fortran/71203 (ICE in add_init_expr_to_sym, at fortran/decl.c:1512 and :1564) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2019-03-09 Thomas König 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 PR fortran/71203 * gfortran.dg/array_simplify_3.f90: New test case. From-SVN: r269526 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/decl.c | 10 ++++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/array_simplify_3.f90 | 9 +++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/array_simplify_3.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 28403689bb1..48ab06b0a18 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-03-09 Thomas König + + 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 PR other/80058 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 3c8c5ffaaaa..31c7fb6325c 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 6b131cbc5fc..d100f1bcdcd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-03-09 Thomas König + + PR fortran/71203 + * gfortran.dg/array_simplify_3.f90: New test case. + 2019-03-09 Jakub Jelinek 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 00000000000..31183b06990 --- /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 -- 2.30.2