OSDN Git Service

2007-07-09 Thomas Koenig <tkoenig@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / libgfortran / generated / maxloc1_16_i4.c
index 3516f22..564b378 100644 (file)
@@ -31,7 +31,6 @@ Boston, MA 02110-1301, USA.  */
 #include "config.h"
 #include <stdlib.h>
 #include <assert.h>
-#include <float.h>
 #include <limits.h>
 #include "libgfortran.h"
 
@@ -71,16 +70,24 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
     {
       sstride[n] = array->dim[n].stride;
       extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound;
+
+      if (extent[n] < 0)
+       extent[n] = 0;
     }
   for (n = dim; n < rank; n++)
     {
       sstride[n] = array->dim[n + 1].stride;
       extent[n] =
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
+
+      if (extent[n] < 0)
+       extent[n] = 0;
     }
 
   if (retarray->data == NULL)
     {
+      size_t alloc_size;
+
       for (n = 0; n < rank; n++)
         {
           retarray->dim[n].lbound = 0;
@@ -91,12 +98,21 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
             retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
         }
 
-      retarray->data
-        = internal_malloc_size (sizeof (GFC_INTEGER_16)
-                                * retarray->dim[rank-1].stride
-                                * extent[rank-1]);
       retarray->offset = 0;
       retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank;
+
+      alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride
+                  * extent[rank-1];
+
+      if (alloc_size == 0)
+       {
+         /* Make sure we have a zero-sized array.  */
+         retarray->dim[0].lbound = 0;
+         retarray->dim[0].ubound = -1;
+         return;
+       }
+      else
+       retarray->data = internal_malloc_size (alloc_size);
     }
   else
     {
@@ -123,7 +139,7 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -213,6 +229,10 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
       sstride[n] = array->dim[n].stride;
       mstride[n] = mask->dim[n].stride;
       extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound;
+
+      if (extent[n] < 0)
+       extent[n] = 0;
+
     }
   for (n = dim; n < rank; n++)
     {
@@ -220,10 +240,15 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
       mstride[n] = mask->dim[n + 1].stride;
       extent[n] =
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
+
+      if (extent[n] < 0)
+       extent[n] = 0;
     }
 
   if (retarray->data == NULL)
     {
+      size_t alloc_size;
+
       for (n = 0; n < rank; n++)
         {
           retarray->dim[n].lbound = 0;
@@ -234,12 +259,22 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
             retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
         }
 
-      retarray->data
-        = internal_malloc_size (sizeof (GFC_INTEGER_16)
-                                * retarray->dim[rank-1].stride
-                                * extent[rank-1]);
+      alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride
+                  * extent[rank-1];
+
       retarray->offset = 0;
       retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank;
+
+      if (alloc_size == 0)
+       {
+         /* Make sure we have a zero-sized array.  */
+         retarray->dim[0].lbound = 0;
+         retarray->dim[0].ubound = -1;
+         return;
+       }
+      else
+       retarray->data = internal_malloc_size (alloc_size);
+
     }
   else
     {
@@ -279,7 +314,7 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;