re PR fortran/38709 (ICE on zero-sized array in initialization expression)
authorDaniel Franke <franke.daniel@gmail.com>
Fri, 10 Apr 2009 14:12:01 +0000 (10:12 -0400)
committerDaniel Franke <dfranke@gcc.gnu.org>
Fri, 10 Apr 2009 14:12:01 +0000 (10:12 -0400)
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

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/zero_sized_6.f90 [new file with mode: 0644]

index d24afdf7cd10581aba3d06ea1019fd88367ea336..4b053706484e5a9d74ed95b5e245c3a6ccd3e65a 100644 (file)
@@ -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
index 94b8e0ea32a6166ee497806625d4c3d96ef840e7..02143c2e33772633c46fdfbd4e705c18e867b76c 100644 (file)
@@ -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);
index d83fb5e3950adc349dee9e1df8b6ea8f5a79618c..002a1cdf1ee3df6397a640eb75b4777efb8c8f2c 100644 (file)
@@ -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 (file)
index 0000000..30ed8df
--- /dev/null
@@ -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