re PR libfortran/35001 (shape for negative sizes)

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

	PR libfortran/35001
	* m4/shape.m4:  Return 0 for extents <= 0.
	* generated/shape_i4.c:  Regenerated.
	* generated/shape_i8.c:  Regenerated.
	* generated/shape_i16.c:  Regenerated.

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

	PR libfortran/35001
	* gfortran.dg/shape_4.f90:  New test.

Fixed in regression-only mode by special dispense (see the PR).

From-SVN: r132070
This commit is contained in:
Thomas Koenig 2008-02-02 13:50:55 +00:00
parent 27f56cb1f2
commit ee440dd05d
7 changed files with 37 additions and 8 deletions

View file

@ -1,3 +1,8 @@
2008-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/35001
* gfortran.dg/shape_4.f90: New test.
2008-02-02 Hans-Peter Nilsson <hp@axis.com>
* gcc.target/cris/torture/pr34773.c: Use __asm__, not asm.

View file

@ -0,0 +1,12 @@
! PR 35001 - we need to return 0 for the shapes of
! negative extents. Test case adapted from Tobias Burnus.
program main
implicit none
integer :: i,j, a(10,10),res(2)
j = 1
i = 10
res = shape(a(1:1,i:j:1))
if (res(1) /=1 .or. res(2) /= 0) call abort
res = shape(a(1:1,j:i:-1))
if (res(1) /=1 .or. res(2) /= 0) call abort
end program main

View file

@ -1,3 +1,11 @@
2008-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/35001
* m4/shape.m4: Return 0 for extents <= 0.
* generated/shape_i4.c: Regenerated.
* generated/shape_i8.c: Regenerated.
* generated/shape_i16.c: Regenerated.
2008-01-27 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/34980

View file

@ -45,6 +45,7 @@ shape_16 (gfc_array_i16 * const restrict ret,
{
int n;
index_type stride;
index_type extent;
stride = ret->dim[0].stride;
@ -53,8 +54,8 @@ shape_16 (gfc_array_i16 * const restrict ret,
for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++)
{
ret->data[n * stride] =
array->dim[n].ubound + 1 - array->dim[n].lbound;
extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
ret->data[n * stride] = extent > 0 ? extent : 0 ;
}
}

View file

@ -45,6 +45,7 @@ shape_4 (gfc_array_i4 * const restrict ret,
{
int n;
index_type stride;
index_type extent;
stride = ret->dim[0].stride;
@ -53,8 +54,8 @@ shape_4 (gfc_array_i4 * const restrict ret,
for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++)
{
ret->data[n * stride] =
array->dim[n].ubound + 1 - array->dim[n].lbound;
extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
ret->data[n * stride] = extent > 0 ? extent : 0 ;
}
}

View file

@ -45,6 +45,7 @@ shape_8 (gfc_array_i8 * const restrict ret,
{
int n;
index_type stride;
index_type extent;
stride = ret->dim[0].stride;
@ -53,8 +54,8 @@ shape_8 (gfc_array_i8 * const restrict ret,
for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++)
{
ret->data[n * stride] =
array->dim[n].ubound + 1 - array->dim[n].lbound;
extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
ret->data[n * stride] = extent > 0 ? extent : 0 ;
}
}

View file

@ -46,6 +46,7 @@ shape_'rtype_kind` ('rtype` * const restrict ret,
{
int n;
index_type stride;
index_type extent;
stride = ret->dim[0].stride;
@ -54,8 +55,8 @@ shape_'rtype_kind` ('rtype` * const restrict ret,
for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++)
{
ret->data[n * stride] =
array->dim[n].ubound + 1 - array->dim[n].lbound;
extent = array->dim[n].ubound + 1 - array->dim[n].lbound;
ret->data[n * stride] = extent > 0 ? extent : 0 ;
}
}