From: Thomas Koenig Date: Sat, 9 Mar 2019 14:10:17 +0000 (+0000) Subject: re PR fortran/71203 (ICE in add_init_expr_to_sym, at fortran/decl.c:1512 and :1564) X-Git-Tag: upstream/12.2.0~25756 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ed5ae524ae350a50a82630342ef9578591090a5;p=platform%2Fupstream%2Fgcc.git re PR fortran/71203 (ICE in add_init_expr_to_sym, at fortran/decl.c:1512 and :1564) 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 --- 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 + + 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 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 + + 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 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