* libgfortran.h (array_t, size0) New declarations.
authorVictor Leikehman <lei@il.ibm.com>
Wed, 4 Aug 2004 14:30:46 +0000 (14:30 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Wed, 4 Aug 2004 14:30:46 +0000 (14:30 +0000)
* m4/ifunction.m4, m4/transpose.m4, intrinsics/cshift0.c: Allocate
space if return value descriptor has NULL in its data field,
and initialize bounds and stride.
* intrinsics/size.c (array_t, size0): Declarations moved to
libgfortran.h.
* generated/*.c: Regenerate.

From-SVN: r85558

52 files changed:
libgfortran/ChangeLog
libgfortran/generated/all_l4.c
libgfortran/generated/all_l8.c
libgfortran/generated/any_l4.c
libgfortran/generated/any_l8.c
libgfortran/generated/count_4_l4.c
libgfortran/generated/count_4_l8.c
libgfortran/generated/count_8_l4.c
libgfortran/generated/count_8_l8.c
libgfortran/generated/maxloc1_4_i4.c
libgfortran/generated/maxloc1_4_i8.c
libgfortran/generated/maxloc1_4_r4.c
libgfortran/generated/maxloc1_4_r8.c
libgfortran/generated/maxloc1_8_i4.c
libgfortran/generated/maxloc1_8_i8.c
libgfortran/generated/maxloc1_8_r4.c
libgfortran/generated/maxloc1_8_r8.c
libgfortran/generated/maxval_i4.c
libgfortran/generated/maxval_i8.c
libgfortran/generated/maxval_r4.c
libgfortran/generated/maxval_r8.c
libgfortran/generated/minloc1_4_i4.c
libgfortran/generated/minloc1_4_i8.c
libgfortran/generated/minloc1_4_r4.c
libgfortran/generated/minloc1_4_r8.c
libgfortran/generated/minloc1_8_i4.c
libgfortran/generated/minloc1_8_i8.c
libgfortran/generated/minloc1_8_r4.c
libgfortran/generated/minloc1_8_r8.c
libgfortran/generated/minval_i4.c
libgfortran/generated/minval_i8.c
libgfortran/generated/minval_r4.c
libgfortran/generated/minval_r8.c
libgfortran/generated/product_c4.c
libgfortran/generated/product_c8.c
libgfortran/generated/product_i4.c
libgfortran/generated/product_i8.c
libgfortran/generated/product_r4.c
libgfortran/generated/product_r8.c
libgfortran/generated/sum_c4.c
libgfortran/generated/sum_c8.c
libgfortran/generated/sum_i4.c
libgfortran/generated/sum_i8.c
libgfortran/generated/sum_r4.c
libgfortran/generated/sum_r8.c
libgfortran/generated/transpose_i4.c
libgfortran/generated/transpose_i8.c
libgfortran/intrinsics/cshift0.c
libgfortran/intrinsics/size.c
libgfortran/libgfortran.h
libgfortran/m4/ifunction.m4
libgfortran/m4/transpose.m4

index 2593982c4871e6f3956f669098effc40f8c2913d..3aaf82fd6f69ec845b6648591ddbc81ddb562f43 100644 (file)
@@ -1,3 +1,13 @@
+2004-08-04  Victor Leikehman  <lei@il.ibm.com>
+
+       * libgfortran.h (array_t, size0) New declarations.
+       * m4/ifunction.m4, m4/transpose.m4, intrinsics/cshift0.c: Allocate
+       space if return value descriptor has NULL in its data field,
+       and initialize bounds and stride.
+       * intrinsics/size.c (array_t, size0): Declarations moved to
+       libgfortran.h.
+       * generated/*.c: Regenerate.
+
 2004-08-03  Roger Sayle  <roger@eyesopen.com>
 
        PR libgfortran/16137
index 3ad6a3d43f9754cc138af3c4145ada31c4da01c4..671684fa57f4c597f5bc752daa99c4a52175a11a 100644 (file)
@@ -63,6 +63,23 @@ __all_l4 (gfc_array_l4 * retarray, gfc_array_l4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_LOGICAL_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index a407a65011bd6c353c32e6ee549af7f73ec5ca5e..3f418ccc45f896f797262d8d96720ff972b183d2 100644 (file)
@@ -63,6 +63,23 @@ __all_l8 (gfc_array_l8 * retarray, gfc_array_l8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_LOGICAL_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 0d79ce72e308358c92395cbc923bee39ba9def3a..64cd6757a48b89c9a9e0816bc338e4d70e6ccb28 100644 (file)
@@ -63,6 +63,23 @@ __any_l4 (gfc_array_l4 * retarray, gfc_array_l4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_LOGICAL_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index e6ac3f5919d5080b26e13491156c1a1924e84f81..c9f418dcd07a149333e80a618f4655ef7d21121f 100644 (file)
@@ -63,6 +63,23 @@ __any_l8 (gfc_array_l8 * retarray, gfc_array_l8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_LOGICAL_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index f3087e45442596beffa3740f1047d6e38e0bdae0..626ebf944e75dfe046b8847cd424e9e698b5a0d2 100644 (file)
@@ -63,6 +63,23 @@ __count_4_l4 (gfc_array_i4 * retarray, gfc_array_l4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 92c1b2f76a3f66a2bc190311a1389b0c36dfbcc2..2db569aac500fccaadbfef3e97fce5c1e5f712de 100644 (file)
@@ -63,6 +63,23 @@ __count_4_l8 (gfc_array_i4 * retarray, gfc_array_l8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 4944eb2cfd318b809fb03d55d558e1da0ab0929b..dadbc96fb4ec962feac35318b74703358dbde887 100644 (file)
@@ -63,6 +63,23 @@ __count_8_l4 (gfc_array_i8 * retarray, gfc_array_l4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 7d7f4b5c032bccc7b38cfe0784d284b780636590..d453e01e45b47e59b6e8f09a3b9f9face2abb3ee 100644 (file)
@@ -63,6 +63,23 @@ __count_8_l8 (gfc_array_i8 * retarray, gfc_array_l8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index dff8627c974a9b4d6aa555c736f257f5a10d5ee9..f2a3718482a23c320bc0097d593ea5517cf9b338 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_4_i4 (gfc_array_i4 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index dbb3cd0a7872591e8a06df7ec95d6fb706862fec..25a93bae5e57ecdf6f85db9c84439bd200b966a8 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_4_i8 (gfc_array_i4 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index d44c556eea615999040d8a930fdce79a705d6dff..5dbf0e6442ee924a7fff639210a41abc1ca7cd4f 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_4_r4 (gfc_array_i4 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 4fe00d60f230de4bd8473e24be871d7f478295c0..90b81865128f06e8c3e380a36b75c1fd5a29a572 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_4_r8 (gfc_array_i4 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 794c6f6936f4c7f413eef416ce9e44c417f9431e..a705e79d794e932cd6758488bc6141b712b82fc9 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_8_i4 (gfc_array_i8 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index f755afb90d97d7fde6f7e8f4aa193ccd054475cc..5edd7d480a593b41d7ccc4033d53d6bc04e1a581 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_8_i8 (gfc_array_i8 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 8e26f1c35498346be6e63a8604a1291ff851d960..5476736e20545eb804ee2b8c56e11ea7c7daa246 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_8_r4 (gfc_array_i8 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 5955f198979d4e72d22bb2b468ad73b9e462b780..0fba535c9750c5486acd8e9351066714687eeea1 100644 (file)
@@ -65,6 +65,23 @@ __maxloc1_8_r8 (gfc_array_i8 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index d130156b57d52c33235db8f720b1bacebb7bb843..90fc202331d3ae93f34c101ce7c76efd644ed293 100644 (file)
@@ -64,6 +64,23 @@ __maxval_i4 (gfc_array_i4 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 3645346286a619a34ed25a432a91e06c369ca03d..9746503707bd3e54a6cab0933856f77b6701c920 100644 (file)
@@ -64,6 +64,23 @@ __maxval_i8 (gfc_array_i8 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 6e82ad68dfb09e80a5564761788047d1afb0bd9e..de999ab390e45d17230da831ed0a506b3dcac399 100644 (file)
@@ -64,6 +64,23 @@ __maxval_r4 (gfc_array_r4 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 34359d619849eae4e139235cae769fc035b07e11..fa357b443fa2b29d81037fbe40a35b26f83adabb 100644 (file)
@@ -64,6 +64,23 @@ __maxval_r8 (gfc_array_r8 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 7cd7dd1a2dd166923d9c1c4d78066c0d4cf8f3ca..be9ae2e452d75b730a17c3c39e07f85e2c08645e 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_4_i4 (gfc_array_i4 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index bbbb02fc7f3bcc4b5a0b3230acfdac1995ef9831..2f17baacbf05e0e1f56e10bed6a7862ba7012706 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_4_i8 (gfc_array_i4 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index e59427bd184ccf9fb8929a1795efdf520c6e7765..7f3449f716b28aa2960210c87c091721251ef4f2 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_4_r4 (gfc_array_i4 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 77b3fabeb7c65b2621e6b1a0e5a14b8be480768a..226d7271c06914e09f69d14969dec7208fdc1117 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_4_r8 (gfc_array_i4 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 1e1c0e1593f432fb7945acefcf07f252c3de0d83..1d1c3d406aabe4e0383c3a84bdf9441f45482ba5 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_8_i4 (gfc_array_i8 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 6b7d5267deb8d4aba8b63cd8c0cd79ecf870d82b..f7b46c17cf7c3812f3ebb18c5a8664711ab61442 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_8_i8 (gfc_array_i8 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 4d088a160f341ef88b934c2edea2c8a5864b5b4f..d71d05621ea88ca9b8de876b69fe7c6797a5a139 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_8_r4 (gfc_array_i8 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 66a1c120749ee0406547e9ee7bc517f98cce3dbc..7de9a2e0377d50bacd35e985da12c1a1bd2c04fe 100644 (file)
@@ -65,6 +65,23 @@ __minloc1_8_r8 (gfc_array_i8 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 70f9b981dfe75187957f1f6d3f44ea80c6962464..e2e68237601e62c9334f1d14ec77152d49682b40 100644 (file)
@@ -64,6 +64,23 @@ __minval_i4 (gfc_array_i4 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index bfac7bad5ff3f7af2ff6f86d329dfdf95fb02ec6..4b7bac6b532967e1113ddc48a203479854c609f6 100644 (file)
@@ -64,6 +64,23 @@ __minval_i8 (gfc_array_i8 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 0dd156b58161ccf14236e4ae3d5ae6b876b695af..8d4e49055be988ff62b324d922bf15b0463826e9 100644 (file)
@@ -64,6 +64,23 @@ __minval_r4 (gfc_array_r4 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 99cd6873d27fcabcb027a89c5d9f9922a59f3c46..8300f7496813a99a95a4ecf02e6aacfca65cae47 100644 (file)
@@ -64,6 +64,23 @@ __minval_r8 (gfc_array_r8 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index e4df38bebf27ef01297ef7c1c95d31984d048714..c69295123ef2ff6ccee5b1e8e243425e1641ff80 100644 (file)
@@ -63,6 +63,23 @@ __product_c4 (gfc_array_c4 * retarray, gfc_array_c4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_COMPLEX_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 427043751ae66ed1d697b7b840229765c6ad3566..68a678586bb379e0989a288eb982ccef89085f79 100644 (file)
@@ -63,6 +63,23 @@ __product_c8 (gfc_array_c8 * retarray, gfc_array_c8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_COMPLEX_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index b8fb8793143a6da8def0bf4dd0d87d4bf52076af..889d4c1bd67fc5b6042b6f1914c7d65873485f55 100644 (file)
@@ -63,6 +63,23 @@ __product_i4 (gfc_array_i4 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 210e61792c792989b8e2437bb57ccf36f60f9dca..74e0459c6b9e79af393d307e0ec6f4c12f682a00 100644 (file)
@@ -63,6 +63,23 @@ __product_i8 (gfc_array_i8 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index c615bbd33da936e4cb01b1029c26bf3fcdc5c4b5..e18139d6b1b7f71e91c9e4d5c1f9db37ab47eed0 100644 (file)
@@ -63,6 +63,23 @@ __product_r4 (gfc_array_r4 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 4d12052be860b89bdbafd1209aaf2fd73e4991e1..ce29c1a8ca29dea4221e05af3743dec7160a0b51 100644 (file)
@@ -63,6 +63,23 @@ __product_r8 (gfc_array_r8 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 91c4e84bf9b193e8cbd224f68b0fb586daa00439..36e20e2e81c45f5a94558e5c4fae85669518c14a 100644 (file)
@@ -63,6 +63,23 @@ __sum_c4 (gfc_array_c4 * retarray, gfc_array_c4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_COMPLEX_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 4ab3e5e36d80bf9ed78b803bb5741a019c1a78bb..971c597341ee914bded329639f50a3c1075265f4 100644 (file)
@@ -63,6 +63,23 @@ __sum_c8 (gfc_array_c8 * retarray, gfc_array_c8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_COMPLEX_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 2d737a1f661cbdb5156f4a957f28afb228d64d4c..628a07756f4418959ef927752ff441dc6b6ea2f1 100644 (file)
@@ -63,6 +63,23 @@ __sum_i4 (gfc_array_i4 * retarray, gfc_array_i4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 42dfd9f38d627b5cd9805d0f18ae52122622b69f..536719dd7e462900c3448d6bc6d22bca9151d326 100644 (file)
@@ -63,6 +63,23 @@ __sum_i8 (gfc_array_i8 * retarray, gfc_array_i8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_INTEGER_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 293b30edb43edf955b5373e337fad506df5bc02d..611a1131739e9aed0807fa43b52430c806498493 100644 (file)
@@ -63,6 +63,23 @@ __sum_r4 (gfc_array_r4 * retarray, gfc_array_r4 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_4) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 294c7980ff7fec11cfd7ac11bce92c7be499e24b..bdc93e0e47a1fdea4eb1fdb0035983724e2a8fa9 100644 (file)
@@ -63,6 +63,23 @@ __sum_r8 (gfc_array_r8 * retarray, gfc_array_r8 *array, index_type *pdim)
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (GFC_REAL_8) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index 184243f21d48b206edad50e4bae0eeb7e33f3aca..930aad9f07d2f57a494942025e7ae723c0fb0d51 100644 (file)
@@ -38,6 +38,21 @@ __transpose_4 (gfc_array_i4 * ret, gfc_array_i4 * source)
 
   assert (GFC_DESCRIPTOR_RANK (source) == 2);
 
+  if (ret->data == NULL)
+    {
+      ret->data = internal_malloc (sizeof (GFC_INTEGER_4) * size0 (source));
+      ret->base = 0;
+      ret->dtype = source->dtype;
+
+      ret->dim[0].lbound = 0;
+      ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound;
+      ret->dim[0].stride = 1;
+
+      ret->dim[1].lbound = 0;
+      ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound;
+      ret->dim[1].stride = ret->dim[0].ubound+1;
+    }
+
   if (ret->dim[0].stride == 0)
     ret->dim[0].stride = 1;
   if (source->dim[0].stride == 0)
index 2dcaa000889fc9669999fd0b234d50bed5f5044c..c4554e6c2109cd95b038c9ddb8381592a3a2b49e 100644 (file)
@@ -38,6 +38,21 @@ __transpose_8 (gfc_array_i8 * ret, gfc_array_i8 * source)
 
   assert (GFC_DESCRIPTOR_RANK (source) == 2);
 
+  if (ret->data == NULL)
+    {
+      ret->data = internal_malloc (sizeof (GFC_INTEGER_8) * size0 (source));
+      ret->base = 0;
+      ret->dtype = source->dtype;
+
+      ret->dim[0].lbound = 0;
+      ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound;
+      ret->dim[0].stride = 1;
+
+      ret->dim[1].lbound = 0;
+      ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound;
+      ret->dim[1].stride = ret->dim[0].ubound+1;
+    }
+
   if (ret->dim[0].stride == 0)
     ret->dim[0].stride = 1;
   if (source->dim[0].stride == 0)
index 5a2c8caabe4b451386f8a942e67edb1604b12b66..dd96ddf173ca4fbba84d7ee9718c521708969dbe 100644 (file)
@@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA.  */
    sizeof(int) < sizeof (index_type).  */
 
 static void
-__cshift0 (const gfc_array_char * ret, const gfc_array_char * array,
+__cshift0 (gfc_array_char * ret, const gfc_array_char * array,
     int shift, int which)
 {
   /* r.* indicates the return array.  */
@@ -69,6 +69,25 @@ __cshift0 (const gfc_array_char * ret, const gfc_array_char * array,
   soffset = size;
   len = 0;
 
+  if (ret->data == NULL)
+    {
+      int i;
+
+      ret->data = internal_malloc (size * size0 ((array_t *)array));
+      ret->base = 0;
+      ret->dtype = array->dtype;
+      for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
+        {
+          ret->dim[i].lbound = 0;
+          ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound;
+
+          if (i == 0)
+            ret->dim[i].stride = 1;
+          else
+            ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride;
+        }
+    }
+
   for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++)
     {
       if (dim == which)
@@ -153,7 +172,7 @@ __cshift0 (const gfc_array_char * ret, const gfc_array_char * array,
 
 
 void
-__cshift0_4 (const gfc_array_char * ret, const gfc_array_char * array,
+__cshift0_4 (gfc_array_char * ret, const gfc_array_char * array,
     const GFC_INTEGER_4 * pshift, const GFC_INTEGER_4 * pdim)
 {
   __cshift0 (ret, array, *pshift, pdim ? *pdim : 1);
@@ -161,7 +180,7 @@ __cshift0_4 (const gfc_array_char * ret, const gfc_array_char * array,
 
 
 void
-__cshift0_8 (const gfc_array_char * ret, const gfc_array_char * array,
+__cshift0_8 (gfc_array_char * ret, const gfc_array_char * array,
     const GFC_INTEGER_8 * pshift, const GFC_INTEGER_8 * pdim)
 {
   __cshift0 (ret, array, *pshift, pdim ? *pdim : 1);
index 5664c304988333e58ad2cb0461f76dfc6d9b8a07..c4c792d6c75506026647b848a4b11d72b44ab542 100644 (file)
@@ -21,9 +21,6 @@ Boston, MA 02111-1307, USA.  */
 
 #include "libgfortran.h"
 
-typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) array_t;
-
-#define size0 prefix(size0)
 index_type size0 (const array_t * array)
 {
   int n;
index c0406aaffed1f299397b43e6dc83532ddeb8b723..6cc26492898c9b8fa571ad2b857082a95b4886c9 100644 (file)
@@ -417,5 +417,12 @@ GFC_REAL_4 normalize_r4_i4 (GFC_UINTEGER_4, GFC_UINTEGER_4);
 #define normalize_r8_i8 prefix(normalize_r8_i8)
 GFC_REAL_8 normalize_r8_i8 (GFC_UINTEGER_8, GFC_UINTEGER_8);
 
+/* size.c */
+
+typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) array_t;
+
+#define size0 prefix(size0)
+index_type size0 (const array_t * array); 
+
 #endif
 
index 74cc1e63cd9659ec9d517a4417ce9809ebf4e7a8..14bd0a639974e9a4d43801a90c63a4e264afed9b 100644 (file)
@@ -57,6 +57,23 @@ define(START_ARRAY_FUNCTION,
         array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound;
     }
 
+  if (retarray->data == NULL)
+    {
+      for (n = 0; n < rank; n++)
+        {
+          retarray->dim[n].lbound = 0;
+          retarray->dim[n].ubound = extent[n]-1;
+          if (n == 0)
+            retarray->dim[n].stride = 1;
+          else
+            retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1];
+        }
+
+      retarray->data = internal_malloc (sizeof (rtype_name) * 
+                                        (retarray->dim[rank-1].stride * extent[rank-1]));
+      retarray->base = 0;
+    }
+          
   for (n = 0; n < rank; n++)
     {
       count[n] = 0;
index fbc4950109790a8af2f65ab3dcd10e451cd5093a..5fd6acfb228586eabd91b971efb9023745c71cb0 100644 (file)
@@ -39,6 +39,23 @@ void
 
   assert (GFC_DESCRIPTOR_RANK (source) == 2);
 
+  if (ret->data == NULL)
+    {
+      assert (GFC_DESCRIPTOR_RANK (ret) == 2);
+      assert (ret->dtype == source->dtype);
+
+      ret->dim[0].lbound = 0;
+      ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound;
+      ret->dim[0].stride = 1;
+
+      ret->dim[1].lbound = 0;
+      ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound;
+      ret->dim[1].stride = ret->dim[0].ubound+1;
+
+      ret->data = internal_malloc (sizeof (rtype_name) * size0 (ret));
+      ret->base = 0;
+    }
+
   if (ret->dim[0].stride == 0)
     ret->dim[0].stride = 1;
   if (source->dim[0].stride == 0)