+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.
--- /dev/null
+! 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
+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
{
int n;
index_type stride;
+ index_type extent;
stride = ret->dim[0].stride;
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 ;
}
}
{
int n;
index_type stride;
+ index_type extent;
stride = ret->dim[0].stride;
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 ;
}
}
{
int n;
index_type stride;
+ index_type extent;
stride = ret->dim[0].stride;
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 ;
}
}
{
int n;
index_type stride;
+ index_type extent;
stride = ret->dim[0].stride;
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 ;
}
}