2011-07-05 Thomas Koenig <tkoenig@gcc.gnu.org>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 5 Jul 2011 18:16:17 +0000 (18:16 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 5 Jul 2011 18:16:17 +0000 (18:16 +0000)
* runtime/memory.c (internal_malloc_size):  If size is zero,
allocate a single byte.
* m4/pack.m4 (pack_'rtype_code`):  Don't check for zero size
for the argument of internal_malloc_size.
* m4/spread.m4 (spread_'rtype_code`):  Likewise.
* m4/eoshift1.m4 (eoshift1):  Don't allocate twice.  Don't check
for zero size for the argument of internal_malloc_size.
* m4/eoshift3.m4: Don't check for zero size for the argument of
internal_malloc_size.
* intrinsics/pack_generic.c (pack_internal):  Likewise.
(pack_s_internal):  Likewise.
* intrinsics/cshift0.c (cshift0):  Likewise.
* intrinsics/spread_generic.c (spread_internal):  Likewise.
* intrinsics/eoshift0.c (eoshift0):  Likewise.
* intrinsics/eoshift2.c (eoshift2):  Likewise.
* generated/eoshift1_16.c: Regenerated.
* generated/eoshift1_4.c: Regenerated.
* generated/eoshift1_8.c: Regenerated.
* generated/eoshift3_16.c: Regenerated.
* generated/eoshift3_4.c: Regenerated.
* generated/eoshift3_8.c: Regenerated.
* generated/pack_c10.c: Regenerated.
* generated/pack_c16.c: Regenerated.
* generated/pack_c4.c: Regenerated.
* generated/pack_c8.c: Regenerated.
* generated/pack_i16.c: Regenerated.
* generated/pack_i1.c: Regenerated.
* generated/pack_i2.c: Regenerated.
* generated/pack_i4.c: Regenerated.
* generated/pack_i8.c: Regenerated.
* generated/pack_r10.c: Regenerated.
* generated/pack_r16.c: Regenerated.
* generated/pack_r4.c: Regenerated.
* generated/pack_r8.c: Regenerated.
* generated/spread_c10.c: Regenerated.
* generated/spread_c16.c: Regenerated.
* generated/spread_c4.c: Regenerated.
* generated/spread_c8.c: Regenerated.
* generated/spread_i16.c: Regenerated.
* generated/spread_i1.c: Regenerated.
* generated/spread_i2.c: Regenerated.
* generated/spread_i4.c: Regenerated.
* generated/spread_i8.c: Regenerated.
* generated/spread_r10.c: Regenerated.
* generated/spread_r16.c: Regenerated.
* generated/spread_r4.c: Regenerated.
* generated/spread_r8.c: Regenerated.

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

43 files changed:
libgfortran/ChangeLog
libgfortran/generated/eoshift1_16.c
libgfortran/generated/eoshift1_4.c
libgfortran/generated/eoshift1_8.c
libgfortran/generated/eoshift3_16.c
libgfortran/generated/eoshift3_4.c
libgfortran/generated/eoshift3_8.c
libgfortran/generated/pack_c10.c
libgfortran/generated/pack_c16.c
libgfortran/generated/pack_c4.c
libgfortran/generated/pack_c8.c
libgfortran/generated/pack_i1.c
libgfortran/generated/pack_i16.c
libgfortran/generated/pack_i2.c
libgfortran/generated/pack_i4.c
libgfortran/generated/pack_i8.c
libgfortran/generated/pack_r10.c
libgfortran/generated/pack_r16.c
libgfortran/generated/pack_r4.c
libgfortran/generated/pack_r8.c
libgfortran/generated/spread_c10.c
libgfortran/generated/spread_c16.c
libgfortran/generated/spread_c4.c
libgfortran/generated/spread_c8.c
libgfortran/generated/spread_i1.c
libgfortran/generated/spread_i16.c
libgfortran/generated/spread_i2.c
libgfortran/generated/spread_i4.c
libgfortran/generated/spread_i8.c
libgfortran/generated/spread_r10.c
libgfortran/generated/spread_r16.c
libgfortran/generated/spread_r4.c
libgfortran/generated/spread_r8.c
libgfortran/intrinsics/cshift0.c
libgfortran/intrinsics/eoshift0.c
libgfortran/intrinsics/eoshift2.c
libgfortran/intrinsics/pack_generic.c
libgfortran/intrinsics/spread_generic.c
libgfortran/m4/eoshift1.m4
libgfortran/m4/eoshift3.m4
libgfortran/m4/pack.m4
libgfortran/m4/spread.m4
libgfortran/runtime/memory.c

index 88ee363..442c032 100644 (file)
@@ -1,3 +1,53 @@
+2011-07-05  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       * runtime/memory.c (internal_malloc_size):  If size is zero,
+       allocate a single byte.
+       * m4/pack.m4 (pack_'rtype_code`):  Don't check for zero size
+       for the argument of internal_malloc_size.
+       * m4/spread.m4 (spread_'rtype_code`):  Likewise.
+       * m4/eoshift1.m4 (eoshift1):  Don't allocate twice.  Don't check
+       for zero size for the argument of internal_malloc_size.
+       * m4/eoshift3.m4: Don't check for zero size for the argument of
+       internal_malloc_size.
+       * intrinsics/pack_generic.c (pack_internal):  Likewise.
+       (pack_s_internal):  Likewise.
+       * intrinsics/cshift0.c (cshift0):  Likewise.
+       * intrinsics/spread_generic.c (spread_internal):  Likewise.
+       * intrinsics/eoshift0.c (eoshift0):  Likewise.
+       * intrinsics/eoshift2.c (eoshift2):  Likewise.
+       * generated/eoshift1_16.c: Regenerated.
+       * generated/eoshift1_4.c: Regenerated.
+       * generated/eoshift1_8.c: Regenerated.
+       * generated/eoshift3_16.c: Regenerated.
+       * generated/eoshift3_4.c: Regenerated.
+       * generated/eoshift3_8.c: Regenerated.
+       * generated/pack_c10.c: Regenerated.
+       * generated/pack_c16.c: Regenerated.
+       * generated/pack_c4.c: Regenerated.
+       * generated/pack_c8.c: Regenerated.
+       * generated/pack_i16.c: Regenerated.
+       * generated/pack_i1.c: Regenerated.
+       * generated/pack_i2.c: Regenerated.
+       * generated/pack_i4.c: Regenerated.
+       * generated/pack_i8.c: Regenerated.
+       * generated/pack_r10.c: Regenerated.
+       * generated/pack_r16.c: Regenerated.
+       * generated/pack_r4.c: Regenerated.
+       * generated/pack_r8.c: Regenerated.
+       * generated/spread_c10.c: Regenerated.
+       * generated/spread_c16.c: Regenerated.
+       * generated/spread_c4.c: Regenerated.
+       * generated/spread_c8.c: Regenerated.
+       * generated/spread_i16.c: Regenerated.
+       * generated/spread_i1.c: Regenerated.
+       * generated/spread_i2.c: Regenerated.
+       * generated/spread_i4.c: Regenerated.
+       * generated/spread_i8.c: Regenerated.
+       * generated/spread_r10.c: Regenerated.
+       * generated/spread_r16.c: Regenerated.
+       * generated/spread_r4.c: Regenerated.
+       * generated/spread_r8.c: Regenerated.
+
 2011-06-28  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/49479
index a14bd29..eb3a27a 100644 (file)
@@ -88,7 +88,6 @@ eoshift1 (gfc_array_char * const restrict ret,
     {
       int i;
 
-      ret->data = internal_malloc_size (size * arraysize);
       ret->offset = 0;
       ret->dtype = array->dtype;
       for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
@@ -106,10 +105,8 @@ eoshift1 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index 06bc309..d3776b9 100644 (file)
@@ -88,7 +88,6 @@ eoshift1 (gfc_array_char * const restrict ret,
     {
       int i;
 
-      ret->data = internal_malloc_size (size * arraysize);
       ret->offset = 0;
       ret->dtype = array->dtype;
       for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
@@ -106,10 +105,8 @@ eoshift1 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index 3e9162d..5f026ac 100644 (file)
@@ -88,7 +88,6 @@ eoshift1 (gfc_array_char * const restrict ret,
     {
       int i;
 
-      ret->data = internal_malloc_size (size * arraysize);
       ret->offset = 0;
       ret->dtype = array->dtype;
       for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
@@ -106,10 +105,8 @@ eoshift1 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index ec21d1e..1cf2167 100644 (file)
@@ -107,10 +107,8 @@ eoshift3 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index ce4cede..c6033d0 100644 (file)
@@ -107,10 +107,8 @@ eoshift3 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index 4af36f7..7a7b196 100644 (file)
@@ -107,10 +107,8 @@ eoshift3 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index cc66c53..621ba8d 100644 (file)
@@ -166,14 +166,12 @@ pack_c10 (gfc_array_c10 *ret, const gfc_array_c10 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_10) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_10) * total);
+           return;
        }
       else 
        {
index 9397262..e98de98 100644 (file)
@@ -166,14 +166,12 @@ pack_c16 (gfc_array_c16 *ret, const gfc_array_c16 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_16) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_16) * total);
+           return;
        }
       else 
        {
index 093bdcc..85e1541 100644 (file)
@@ -166,14 +166,12 @@ pack_c4 (gfc_array_c4 *ret, const gfc_array_c4 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_4) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_4) * total);
+           return;
        }
       else 
        {
index 7971e2b..bfaec2f 100644 (file)
@@ -166,14 +166,12 @@ pack_c8 (gfc_array_c8 *ret, const gfc_array_c8 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_8) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_8) * total);
+           return;
        }
       else 
        {
index 3e4647d..c168aff 100644 (file)
@@ -166,14 +166,12 @@ pack_i1 (gfc_array_i1 *ret, const gfc_array_i1 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_INTEGER_1) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_INTEGER_1) * total);
+           return;
        }
       else 
        {
index 99d3491..81ed49a 100644 (file)
@@ -166,14 +166,12 @@ pack_i16 (gfc_array_i16 *ret, const gfc_array_i16 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * total);
+           return;
        }
       else 
        {
index e796d16..a04b7af 100644 (file)
@@ -166,14 +166,12 @@ pack_i2 (gfc_array_i2 *ret, const gfc_array_i2 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_INTEGER_2) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_INTEGER_2) * total);
+           return;
        }
       else 
        {
index 91ce99f..c5d112b 100644 (file)
@@ -166,14 +166,12 @@ pack_i4 (gfc_array_i4 *ret, const gfc_array_i4 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * total);
+           return;
        }
       else 
        {
index e49d8c2..7307192 100644 (file)
@@ -166,14 +166,12 @@ pack_i8 (gfc_array_i8 *ret, const gfc_array_i8 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * total);
+           return;
        }
       else 
        {
index f70c932..c3b55cc 100644 (file)
@@ -166,14 +166,12 @@ pack_r10 (gfc_array_r10 *ret, const gfc_array_r10 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_REAL_10) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_REAL_10) * total);
+           return;
        }
       else 
        {
index ff2ad6e..489ff95 100644 (file)
@@ -166,14 +166,12 @@ pack_r16 (gfc_array_r16 *ret, const gfc_array_r16 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_REAL_16) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_REAL_16) * total);
+           return;
        }
       else 
        {
index 0c08b8c..05172db 100644 (file)
@@ -166,14 +166,12 @@ pack_r4 (gfc_array_r4 *ret, const gfc_array_r4 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_REAL_4) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_REAL_4) * total);
+           return;
        }
       else 
        {
index 2b307e2..df5cc3f 100644 (file)
@@ -166,14 +166,12 @@ pack_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof (GFC_REAL_8) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof (GFC_REAL_8) * total);
+           return;
        }
       else 
        {
index 77a838f..d8a5baf 100644 (file)
@@ -100,13 +100,11 @@ spread_c10 (gfc_array_c10 *ret, const gfc_array_c10 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_10));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_10));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 1276e4d..0bfba7f 100644 (file)
@@ -100,13 +100,11 @@ spread_c16 (gfc_array_c16 *ret, const gfc_array_c16 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_16));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_16));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 5224e84..e1a475f 100644 (file)
@@ -100,13 +100,11 @@ spread_c4 (gfc_array_c4 *ret, const gfc_array_c4 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_4));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_4));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 96ecb3a..a290290 100644 (file)
@@ -100,13 +100,11 @@ spread_c8 (gfc_array_c8 *ret, const gfc_array_c8 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_8));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_8));
+      if (rs <= 0)
+        return;
     }
   else
     {
index e002c14..111c4cc 100644 (file)
@@ -100,13 +100,11 @@ spread_i1 (gfc_array_i1 *ret, const gfc_array_i1 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_1));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_1));
+      if (rs <= 0)
+        return;
     }
   else
     {
index bdefdac..2a4864b 100644 (file)
@@ -100,13 +100,11 @@ spread_i16 (gfc_array_i16 *ret, const gfc_array_i16 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_16));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_16));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 8482cfd..5a5d870 100644 (file)
@@ -100,13 +100,11 @@ spread_i2 (gfc_array_i2 *ret, const gfc_array_i2 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_2));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_2));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 6eff632..e990408 100644 (file)
@@ -100,13 +100,11 @@ spread_i4 (gfc_array_i4 *ret, const gfc_array_i4 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_4));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_4));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 2931263..1e3b305 100644 (file)
@@ -100,13 +100,11 @@ spread_i8 (gfc_array_i8 *ret, const gfc_array_i8 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_8));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_8));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 3c3f197..ef86bc5 100644 (file)
@@ -100,13 +100,11 @@ spread_r10 (gfc_array_r10 *ret, const gfc_array_r10 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_10));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_10));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 1316260..9678e87 100644 (file)
@@ -100,13 +100,11 @@ spread_r16 (gfc_array_r16 *ret, const gfc_array_r16 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_16));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_16));
+      if (rs <= 0)
+        return;
     }
   else
     {
index cc0f119..fac0900 100644 (file)
@@ -100,13 +100,11 @@ spread_r4 (gfc_array_r4 *ret, const gfc_array_r4 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_4));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_4));
+      if (rs <= 0)
+        return;
     }
   else
     {
index f38ef38..0dd9e7b 100644 (file)
@@ -100,13 +100,11 @@ spread_r8 (gfc_array_r8 *ret, const gfc_array_r8 *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_8));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_8));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 00a50d5..026dd1a 100644 (file)
@@ -79,10 +79,8 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
         }
 
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
     }
   else if (unlikely (compile_options.bounds_check))
     {
index 74ba5ab..6ceed20 100644 (file)
@@ -86,11 +86,8 @@ eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
 
         }
 
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
-
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
     }
   else if (unlikely (compile_options.bounds_check))
     {
index 2fbf62e..b4f8278 100644 (file)
@@ -91,10 +91,8 @@ eoshift2 (gfc_array_char *ret, const gfc_array_char *array,
 
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
-         if (arraysize > 0)
-           ret->data = internal_malloc_size (size * arraysize);
-         else
-           ret->data = internal_malloc_size (1);
+          /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (size * arraysize);
 
         }
     }
index c15bdd0..de1e07f 100644 (file)
@@ -153,14 +153,11 @@ pack_internal (gfc_array_char *ret, const gfc_array_char *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (size * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (size * total);
+           return;      /* In this case, nothing remains to be done.  */
        }
       else 
        {
@@ -523,13 +520,10 @@ pack_s_internal (gfc_array_char *ret, const gfc_array_char *array,
 
       ret->offset = 0;
 
+      ret->data = internal_malloc_size (size * total);
+
       if (total == 0)
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
-      else
-       ret->data = internal_malloc_size (size * total);
+       return;
     }
 
   rstride0 = GFC_DESCRIPTOR_STRIDE_BYTES(ret,0);
index 29671ce..2eeb24b 100644 (file)
@@ -100,13 +100,10 @@ spread_internal (gfc_array_char *ret, const gfc_array_char *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * size);
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+      ret->data = internal_malloc_size (rs * size);
+
+      if (rs <= 0)
+       return;
     }
   else
     {
index be9b100..339e1d8 100644 (file)
@@ -89,7 +89,6 @@ eoshift1 (gfc_array_char * const restrict ret,
     {
       int i;
 
-      ret->data = internal_malloc_size (size * arraysize);
       ret->offset = 0;
       ret->dtype = array->dtype;
       for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
@@ -107,10 +106,8 @@ eoshift1 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index 6fa3bd2..1c19575 100644 (file)
@@ -108,10 +108,8 @@ eoshift3 (gfc_array_char * const restrict ret,
          GFC_DIMENSION_SET(ret->dim[i], 0, ub, str);
 
         }
-      if (arraysize > 0)
-       ret->data = internal_malloc_size (size * arraysize);
-      else
-       ret->data = internal_malloc_size (1);
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (size * arraysize);
 
     }
   else if (unlikely (compile_options.bounds_check))
index c5fd2fd..e1882d0 100644 (file)
@@ -167,14 +167,12 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
          GFC_DIMENSION_SET(ret->dim[0], 0, total-1, 1);
 
          ret->offset = 0;
+
+         /* internal_malloc_size allocates a single byte for zero size.  */
+         ret->data = internal_malloc_size (sizeof ('rtype_name`) * total);
+
          if (total == 0)
-           {
-             /* In this case, nothing remains to be done.  */
-             ret->data = internal_malloc_size (1);
-             return;
-           }
-         else
-           ret->data = internal_malloc_size (sizeof ('rtype_name`) * total);
+           return;
        }
       else 
        {
index 5e73d97..89a2e65 100644 (file)
@@ -101,13 +101,11 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
          GFC_DIMENSION_SET(ret->dim[n], 0, ub, stride);
        }
       ret->offset = 0;
-      if (rs > 0)
-        ret->data = internal_malloc_size (rs * sizeof('rtype_name`));
-      else
-       {
-         ret->data = internal_malloc_size (1);
-         return;
-       }
+
+      /* internal_malloc_size allocates a single byte for zero size.  */
+      ret->data = internal_malloc_size (rs * sizeof('rtype_name`));
+      if (rs <= 0)
+        return;
     }
   else
     {
index 5f71084..a26d9e5 100644 (file)
@@ -54,8 +54,8 @@ get_mem (size_t n)
 void *
 internal_malloc_size (size_t size)
 {
-  if (size == 0)
-    return NULL;
+  if (unlikely (size == 0))
+    size = 1;
 
   return get_mem (size);
 }