OSDN Git Service

2008-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Feb 2008 13:50:55 +0000 (13:50 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Feb 2008 13:50:55 +0000 (13:50 +0000)
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).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132070 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/shape_4.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/shape_i16.c
libgfortran/generated/shape_i4.c
libgfortran/generated/shape_i8.c
libgfortran/m4/shape.m4

index 8a96691..06cd1b1 100644 (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.
diff --git a/gcc/testsuite/gfortran.dg/shape_4.f90 b/gcc/testsuite/gfortran.dg/shape_4.f90
new file mode 100644 (file)
index 0000000..9275b11
--- /dev/null
@@ -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
index b71eb30..432aa56 100644 (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
index 77274d6..0ab2654 100644 (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 ;
     }
 }
 
index 787ba54..64a6fcd 100644 (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 ;
     }
 }
 
index f318b17..80bef31 100644 (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 ;
     }
 }
 
index 3bda0ad..c783270 100644 (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 ;
     }
 }