re PR fortran/35988 (run-time abort for MATMUL of run-time zero sized array)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Wed, 23 Apr 2008 05:50:54 +0000 (05:50 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Wed, 23 Apr 2008 05:50:54 +0000 (05:50 +0000)
2008-04-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfortran/35988
* m4/matmul.m4:  Only issue a runtime error if extents are
non-zero.
* generated/matmul_i1.c:  Regenerated.
* generated/matmul_i2.c:  Regenerated.
* generated/matmul_i4.c:  Regenerated.
* generated/matmul_i8.c:  Regenerated.
* generated/matmul_i16.c:  Regenerated.
* generated/matmul_r4.c:  Regenerated.
* generated/matmul_r8.c:  Regenerated.
* generated/matmul_r10.c:  Regenerated.
* generated/matmul_r16.c:  Regenerated.
* generated/matmul_c4.c:  Regenerated.
* generated/matmul_c8.c:  Regenerated.
* generated/matmul_c10.c:  Regenerated.
* generated/matmul_c16.c:  Regenerated.

2008-04-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfortran/35988
* gfortran.dg/matmul_7.f90:  New test.

From-SVN: r134579

17 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/matmul_7.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/matmul_c10.c
libgfortran/generated/matmul_c16.c
libgfortran/generated/matmul_c4.c
libgfortran/generated/matmul_c8.c
libgfortran/generated/matmul_i1.c
libgfortran/generated/matmul_i16.c
libgfortran/generated/matmul_i2.c
libgfortran/generated/matmul_i4.c
libgfortran/generated/matmul_i8.c
libgfortran/generated/matmul_r10.c
libgfortran/generated/matmul_r16.c
libgfortran/generated/matmul_r4.c
libgfortran/generated/matmul_r8.c
libgfortran/m4/matmul.m4

index ff78770e9ce6dc4a52ebef36e58dca03e31e8c24..7896b742e9e85d5227704715cacf4c8ea9cd4238 100644 (file)
@@ -1,3 +1,8 @@
+2008-04-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR libfortran/35988
+       * gfortran.dg/matmul_7.f90:  New test.
+
 2008-04-22  Steve Ellcey  <sje@cup.hp.com>
 
        * gcc.dg/struct/wo_prof_global_var.c: Initialize array.
diff --git a/gcc/testsuite/gfortran.dg/matmul_7.f90 b/gcc/testsuite/gfortran.dg/matmul_7.f90
new file mode 100644 (file)
index 0000000..b3f925a
--- /dev/null
@@ -0,0 +1,40 @@
+! { dg-do run }
+! PR 35988 - failure on some zero-sized matmuls.
+! Test case contributed by Dick Hendrickson.
+
+       program try_gf1003
+
+      call       gf1003a(  9,  8,  6)   
+      call       gf1003b(  9,  8,  6)   
+      call       gf1003c(  9,  8,  6)   !fails
+      call       gf1003d(  9,  8,  6)   !fails
+      end program
+
+
+      SUBROUTINE GF1003a(nf9,nf8,nf6)
+      REAL RDA(3,2)
+      REAL RDA1(3,5)
+      REAL RDA2(5,2)
+      RDA = MATMUL(RDA1(:, 9:8),RDA2( 8:6,:))
+      END SUBROUTINE
+
+      SUBROUTINE GF1003b(nf9,nf8,nf6)
+      REAL RDA(3,2)
+      REAL RDA1(3,0)
+      REAL RDA2(0,2)
+      RDA = MATMUL(RDA1(:,NF9:NF8),RDA2(NF9:NF8,:))
+      END SUBROUTINE
+
+      SUBROUTINE GF1003c(nf9,nf8,nf6)
+      REAL RDA(3,2)
+      REAL RDA1(3,0)
+      REAL RDA2(0,2)
+      RDA = MATMUL(RDA1(:,NF9:NF8),RDA2(NF8:NF6,:))
+      END SUBROUTINE
+
+      SUBROUTINE GF1003d(nf9,nf8,nf6)
+      REAL RDA(3,2)
+      REAL RDA1(3,5)
+      REAL RDA2(5,2)
+      RDA = MATMUL(RDA1(:,NF9:NF8),RDA2(NF8:NF6,:))
+      END SUBROUTINE
index 434f9dff5bcfb320e8af9e0b3b61f160f33a5f08..3d6ed1a8e1b3972598e154d088e45827f8f23171 100644 (file)
@@ -1,3 +1,22 @@
+2008-04-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR libfortran/35988
+       * m4/matmul.m4:  Only issue a runtime error if extents are
+       non-zero.
+       * generated/matmul_i1.c:  Regenerated.
+       * generated/matmul_i2.c:  Regenerated.
+       * generated/matmul_i4.c:  Regenerated.
+       * generated/matmul_i8.c:  Regenerated.
+       * generated/matmul_i16.c:  Regenerated.
+       * generated/matmul_r4.c:  Regenerated.
+       * generated/matmul_r8.c:  Regenerated.
+       * generated/matmul_r10.c:  Regenerated.
+       * generated/matmul_r16.c:  Regenerated.
+       * generated/matmul_c4.c:  Regenerated.
+       * generated/matmul_c8.c:  Regenerated.
+       * generated/matmul_c10.c:  Regenerated.
+       * generated/matmul_c16.c:  Regenerated.
+
 2008-04-21  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * acinclude.m4 (LIBGFOR_CHECK_ATTRIBUTE_VISIBILITY)
index 84c6c5daabb8597d2370865f3abdb6be7ca2d0ad..08c2044dd8b98602fb079518b4a805d7ee50c298 100644 (file)
@@ -170,7 +170,10 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 79ca57858ab74a2d44d49d5ce57382cf964b5abe..6a2a63909678c1ea66f9175029ded72f24f84b78 100644 (file)
@@ -170,7 +170,10 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index f6b15796ad912b73981c9acd724e6257d58a0492..6dcf6fea56a9fdcf49c9b7545556be5effbb56af 100644 (file)
@@ -170,7 +170,10 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 5f4bdec8670665230e1c2524261fe639dd3a9783..8bc619d879f68c240adb42cff3a74b9a681dd671 100644 (file)
@@ -170,7 +170,10 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 7c2e95e8893bfa06363e2b8ee4a8e7087b213d6c..ca16ed40b2f4dc79fadedaf4eac7cdbc806f3dce 100644 (file)
@@ -170,7 +170,10 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 9c33cc77b82fa95b9f3d9bc0232c70e68c01b094..33c62ae41529c86fa3d766e3816ab00e5e2cd729 100644 (file)
@@ -170,7 +170,10 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 143f78329411f6e557f4dfac127181199bc99655..e3119acbd41fb1ac394defd6fb8adff30bd1cd6b 100644 (file)
@@ -170,7 +170,10 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index b90c43851f1d416d2019b5f08a59755b245f6a93..a1b8c50f051173c6ef321f5cacc61f541294822f 100644 (file)
@@ -170,7 +170,10 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index b3260757c6e111895f2175d4f17c761ac6bd5c1a..eee73ac88f031ada9285228377f85d88e541b2e8 100644 (file)
@@ -170,7 +170,10 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index ee404b1b789c8cd1ce0bc0f705def832fcdc0f15..58dfe75814f45fbed100cd054b4b0dea01a633d1 100644 (file)
@@ -170,7 +170,10 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 1d5f41efae519fb4e5913b470cc69ebeae263bc4..a6a93be91fb5dfa16f31274c0308c8ba84370ea3 100644 (file)
@@ -170,7 +170,10 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index dc89f5592f9d3fbadfdaa0b7979bddf7306ef93d..1154d41a33f2148c599cbf240b8c23dbd0521b13 100644 (file)
@@ -170,7 +170,10 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index 5b23f28d6976d2add4d3a1717c67de0ab5536c0b..7bce2533b418cd720b2a500daf0a4e53d909d24c 100644 (file)
@@ -170,7 +170,10 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {
index a290bfe1f06d94bebba85ae8a3757272aa3899c8..181efa3b654b85c3c03b0581520549dd587881d1 100644 (file)
@@ -172,7 +172,10 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
     }
 
   if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
-    runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    {
+      if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
+       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+    }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
     {