memory.c (internal_malloc_size): If size is zero, allocate a single byte.
authorThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 5 Jul 2011 18:16:17 +0000 (18:16 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 5 Jul 2011 18:16:17 +0000 (18:16 +0000)
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.

From-SVN: r175880

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 88ee3638d1784b41915326939b069abf0153dd3d..442c032f47720996253298f4568f64dc81ae2384 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 a14bd2927153128e7fb1ef86fd365c74c7f89a41..eb3a27a1c64e56d2d7bfa61dbb6364da1c1e11b2 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 06bc309c4a845b8c033e6e8bd2c80e5c584eb386..d3776b911b0fa633686c11f6470422682e6d4983 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 3e9162d0f085529c9235be56c378f670d20bc8f7..5f026acdfcb6893f6f1c9d989a9ac519187ecc8e 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 ec21d1ec14dc1cf22455158eab8007d365ab3ab7..1cf216767aca410f4e00ee52fc4a4f557cc24377 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 ce4cede1f1d0dd57b2ea1ae5a7028bfff071e516..c6033d0a58a59771343f94445d38e6e6a72091d9 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 4af36f72bb49e614a525439d95dfbb55a0e85b31..7a7b196eec4840d829fe5a6924e516b28e4274e8 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 cc66c538e1c065e2fc80d4522e663bc1978fd49c..621ba8d8b797c6f5573c6b7386e8362815ed99ab 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 9397262dd06d698f0bbb015e1db6239a78a80b15..e98de98c91cc41bf4af07cd11ea18a6a26f7e3df 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 093bdcc9a1d00c021d260ca2019a1a6b071b2457..85e154178515c565c63c6e14793d6742c5f6abe0 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 7971e2ba1358f53d678405ef207e919ea48d69bd..bfaec2fc910d96b6eae40eea1b71b8b1ed5f72c9 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 3e4647dbd5595a8fbcbdd773375fa75b51ede09c..c168affaea0e279e2d80f37510ba1075057e6008 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 99d3491c38f2859b8e5ff05a9cc2a606cfd32899..81ed49a8208bbae23aa8931f3331ef6ab1876433 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 e796d169f76f199f62afbd7708c42654677cd153..a04b7af6969508775a4b9c34dcdba10de28f5bb4 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 91ce99fe4fd46fc146b635c014b605de36955a81..c5d112bd3946081608ceee50fb2cfaa8773b5faa 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 e49d8c29e95be438401838561e2a8f90aa8ec422..7307192749b769c276eed58f678bd9b60c612c80 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 f70c932640e1a849ca8fc82b5eb08c49cf45282b..c3b55cc1a9f99bc75dc2abde7cb0a2b45554c112 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 ff2ad6e7eed654b88b7a663f8dbb6ad851327246..489ff957aa1c0a5533b2d4349a86478aa876b1b3 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 0c08b8c8c94d32a4f8c1f0607051e4adeb8cd088..05172dbbb06d39db480e3612bfd1ad39f9a82a29 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 2b307e29a2b7e8fe9dbe5c7bac903cbde3bc4f81..df5cc3f3a6e4a96c589e4ea611413e7441448dda 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 77a838f01a4370fecace3309df21c112e321a479..d8a5bafe23554331dd080aa3eb6e6dc8212e1557 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 1276e4dfb44e8dbcc70ce0f55f0db2b846f29647..0bfba7f414540ad76d50f4c50d945fbb491f7d6b 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 5224e8477a90dca85b5c86af35c2848e695fb16b..e1a475f6f126a7905573bef3fd325e86d9c4f78f 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 96ecb3afb87bb7b9c89addc675669dc64d2ffbb6..a2902908e76275b8fc489be4637e2a97a656b8db 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 e002c146262b69d0358e8619142d12a179dccf74..111c4ccea5f76eab084cce778fd72808797d6edb 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 bdefdac32715848963a6c7d524cce8580e9aafac..2a4864ba41ca1b0665de3b0818e96c29d19454b5 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 8482cfde8575efde08cd435a863fe0fa91f91073..5a5d87064e6b37c0f76bd9602ed56a1673586c0b 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 6eff6326b2613e4dc66b5b03e92b9f54ce49a885..e990408b0a443e33a7b78d32555979ad1498e5b5 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 293126363064ff8ea86f08b1942b5469434d05cc..1e3b3055b8fd926729fefe5bf58d54baf98c72b0 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 3c3f197b4c2269e012bbb2b8c2c1de4a62bfe471..ef86bc59007999271249f266f2ead4146c2d499f 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 1316260969608c8f1268b3784b1ddd59f49229ab..9678e8768a0f58e4e2598572994fed210534b5ba 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 cc0f1197b69df47e825c7a6939fac2d5fbb76ad5..fac0900cbb442fc0dca724c84aa741e49f0eb1d1 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 f38ef3885fc3ec5bac255eb23abd6e48d366bf77..0dd9e7bf5adb49aef3034d0b8389cbb24eb2dcab 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 00a50d5db7c6fe00de717da3f0d3e2f545f5e40a..026dd1adc0d922b86f22c2ade7ad2e1a2f96a269 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 74ba5ab7a97f275887ea9071e76661754adc897d..6ceed2000e00a76ec9fe293c62a1300d7af06371 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 2fbf62e118c70675e7b6b83df54738a80efc1c63..b4f8278696452966905a4d74939543436d30b83d 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 c15bdd08f414b2f5ffbe5d613ae54cd9ba56ffe3..de1e07facabe9fc762fab5aecbe341e1588baacd 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 29671ce4c86b3da9b08aed777e6358df63c77efe..2eeb24b84445a47c61d43a65cc1f9eb7edaa9228 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 be9b1008a60fa7c2fa2d8e4037d4e9644c3f0cc7..339e1d89965e7a3aa918997569c676f3b19988f0 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 6fa3bd2f7dcf599651070b13e9d7072522afa4c6..1c19575ffb86e9694864a254f8c878b909b0d765 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 c5fd2fd817d05da60719170e1502a634bdfbad5f..e1882d077c2378fcf945735bc7c43a003bdf97b9 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 5e73d97423ab56b671150a611528301daf383c55..89a2e65297c1d57bd032b3593bb2033ef1829bbe 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 5f710849e529141ce179961cec86b64f2ae0e4d8..a26d9e59efa2f89ede50d6ff8bac1dc310b7cdda 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);
 }