Commit 7edc89d4 by Thomas Koenig

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
parent d5555b95
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.
! { 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
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)
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
......@@ -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)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment