aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Franke <franke.daniel@gmail.com>2009-04-10 10:12:01 -0400
committerDaniel Franke <dfranke@gcc.gnu.org>2009-04-10 10:12:01 -0400
commit045ac3671593f6cb1a087a22cc9b8bff2b357198 (patch)
treeab3b7a160655ccb16d9d08df721888359e61b9f6 /gcc
parent7ef455560c88e6a757602afb0f7b3f9e1e2068f7 (diff)
downloadgcc-045ac3671593f6cb1a087a22cc9b8bff2b357198.zip
gcc-045ac3671593f6cb1a087a22cc9b8bff2b357198.tar.gz
gcc-045ac3671593f6cb1a087a22cc9b8bff2b357198.tar.bz2
re PR fortran/38709 (ICE on zero-sized array in initialization expression)
gcc/fortran/: 2009-04-10 Daniel Franke <franke.daniel@gmail.com> PR fortran/38709 * expr.c (find_array_section): Leave early on zero-sized arrays. gcc/testsuite/: 2009-04-10 Daniel Franke <franke.daniel@gmail.com> PR fortran/38709 * gfortran.dg/zero_sized_6.f90: New. From-SVN: r145909
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/expr.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/zero_sized_6.f906
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index d24afdf..4b05370 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-10 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/38709
+ * expr.c (find_array_section): Leave early on zero-sized arrays.
+
2009-04-09 Janus Weil <janus@gcc.gnu.org>
PR fortran/36704
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 94b8e0e..02143c2 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 d83fb5e..002a1cd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-10 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/38709
+ * gfortran.dg/zero_sized_6.f90: New.
+
2009-04-10 Manuel López-Ibáñez <manu@gcc.gnu.org>
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 0000000..30ed8df
--- /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