This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[patch, libfortran] Fix PR 35988
- From: Thomas Koenig <tkoenig at netcologne dot de>
- To: fortran at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Tue, 22 Apr 2008 22:24:31 +0200
- Subject: [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