From 045ac3671593f6cb1a087a22cc9b8bff2b357198 Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Fri, 10 Apr 2009 10:12:01 -0400 Subject: [PATCH] re PR fortran/38709 (ICE on zero-sized array in initialization expression) gcc/fortran/: 2009-04-10 Daniel Franke PR fortran/38709 * expr.c (find_array_section): Leave early on zero-sized arrays. gcc/testsuite/: 2009-04-10 Daniel Franke PR fortran/38709 * gfortran.dg/zero_sized_6.f90: New. From-SVN: r145909 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/expr.c | 7 ++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/zero_sized_6.f90 | 6 ++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/zero_sized_6.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d24afdf7cd10..4b053706484e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2009-04-10 Daniel Franke + + PR fortran/38709 + * expr.c (find_array_section): Leave early on zero-sized arrays. + 2009-04-09 Janus Weil PR fortran/36704 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 94b8e0ea32a6..02143c2e3377 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -1210,7 +1210,12 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) } gcc_assert (begin->rank == 1); - gcc_assert (begin->shape); + /* Zero-sized arrays have no shape and no elements, stop early. */ + if (!begin->shape) + { + mpz_init_set_ui (nelts, 0); + break; + } vecsub[d] = begin->value.constructor; mpz_set (ctr[d], vecsub[d]->expr->value.integer); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d83fb5e3950a..002a1cdf1ee3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-10 Daniel Franke + + PR fortran/38709 + * gfortran.dg/zero_sized_6.f90: New. + 2009-04-10 Manuel López-Ibáñez PR c++/20118 diff --git a/gcc/testsuite/gfortran.dg/zero_sized_6.f90 b/gcc/testsuite/gfortran.dg/zero_sized_6.f90 new file mode 100644 index 000000000000..30ed8dfaaf5c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/zero_sized_6.f90 @@ -0,0 +1,6 @@ +! { dg-do "compile" } +! PR38709 - ICE-on-invalid on zero-sized array in init-expr. + + INTEGER, PARAMETER :: a(1) = (/ 1 /) + INTEGER, PARAMETER :: i = a(shape(1)) ! { dg-error "Incompatible ranks" } +END