re PR fortran/35988 (run-time abort for MATMUL of run-time zero sized array)

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
This commit is contained in:
Thomas Koenig 2008-04-23 05:50:54 +00:00
parent d5555b955d
commit 7edc89d4c1
17 changed files with 120 additions and 14 deletions

View 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.

View file

@ -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

View 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)

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{

View 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)
{