This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch, libfortran] Fix PR 35988


Hello world,

the patch below should be self-explanatory.  The test case is the
reporter's.

Currently regression-testing on i686-pc-linux-gnu.  OK for trunk once
that passes?

	Thomas

2008-04-22  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-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

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

Index: m4/matmul.m4
===================================================================
--- m4/matmul.m4	(revision 134490)
+++ m4/matmul.m4	(working copy)
@@ -172,7 +172,10 @@ sinclude(`matmul_asm_'rtype_code`.m4')dn
     }
 
   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)
     {
! { 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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]