| Index: gcc/libgfortran/generated/eoshift1_16.c
|
| diff --git a/gcc/libgfortran/generated/eoshift1_16.c b/gcc/libgfortran/generated/eoshift1_16.c
|
| index b9fe9c311fc51f2524a95907dda8c0b10de08482..a14bd2927153128e7fb1ef86fd365c74c7f89a41 100644
|
| --- a/gcc/libgfortran/generated/eoshift1_16.c
|
| +++ b/gcc/libgfortran/generated/eoshift1_16.c
|
| @@ -37,7 +37,7 @@ eoshift1 (gfc_array_char * const restrict ret,
|
| const gfc_array_i16 * const restrict h,
|
| const char * const restrict pbound,
|
| const GFC_INTEGER_16 * const restrict pwhich,
|
| - index_type size, const char * filler, index_type filler_len)
|
| + const char * filler, index_type filler_len)
|
| {
|
| /* r.* indicates the return array. */
|
| index_type rstride[GFC_MAX_DIMENSIONS];
|
| @@ -61,6 +61,8 @@ eoshift1 (gfc_array_char * const restrict ret,
|
| index_type dim;
|
| index_type len;
|
| index_type n;
|
| + index_type size;
|
| + index_type arraysize;
|
| int which;
|
| GFC_INTEGER_16 sh;
|
| GFC_INTEGER_16 delta;
|
| @@ -71,6 +73,8 @@ eoshift1 (gfc_array_char * const restrict ret,
|
| soffset = 0;
|
| roffset = 0;
|
|
|
| + size = GFC_DESCRIPTOR_SIZE(array);
|
| +
|
| if (pwhich)
|
| which = *pwhich - 1;
|
| else
|
| @@ -79,51 +83,71 @@ eoshift1 (gfc_array_char * const restrict ret,
|
| extent[0] = 1;
|
| count[0] = 0;
|
|
|
| + arraysize = size0 ((array_t *) array);
|
| if (ret->data == NULL)
|
| {
|
| int i;
|
|
|
| - ret->data = internal_malloc_size (size * size0 ((array_t *)array));
|
| + ret->data = internal_malloc_size (size * arraysize);
|
| ret->offset = 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;
|
| + index_type ub, str;
|
| +
|
| + ub = GFC_DESCRIPTOR_EXTENT(array,i) - 1;
|
|
|
| if (i == 0)
|
| - ret->dim[i].stride = 1;
|
| + str = 1;
|
| else
|
| - ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride;
|
| + str = GFC_DESCRIPTOR_EXTENT(ret,i-1)
|
| + * GFC_DESCRIPTOR_STRIDE(ret,i-1);
|
| +
|
| + 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);
|
| +
|
| }
|
| - else
|
| + else if (unlikely (compile_options.bounds_check))
|
| {
|
| - if (size0 ((array_t *) ret) == 0)
|
| - return;
|
| + bounds_equal_extents ((array_t *) ret, (array_t *) array,
|
| + "return value", "EOSHIFT");
|
| }
|
|
|
| + if (unlikely (compile_options.bounds_check))
|
| + {
|
| + bounds_reduced_extents ((array_t *) h, (array_t *) array, which,
|
| + "SHIFT argument", "EOSHIFT");
|
| + }
|
| +
|
| + if (arraysize == 0)
|
| + return;
|
| +
|
| n = 0;
|
| for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++)
|
| {
|
| if (dim == which)
|
| {
|
| - roffset = ret->dim[dim].stride * size;
|
| + roffset = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
|
| if (roffset == 0)
|
| roffset = size;
|
| - soffset = array->dim[dim].stride * size;
|
| + soffset = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
|
| if (soffset == 0)
|
| soffset = size;
|
| - len = array->dim[dim].ubound + 1 - array->dim[dim].lbound;
|
| + len = GFC_DESCRIPTOR_EXTENT(array,dim);
|
| }
|
| else
|
| {
|
| count[n] = 0;
|
| - extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound;
|
| - rstride[n] = ret->dim[dim].stride * size;
|
| - sstride[n] = array->dim[dim].stride * size;
|
| + extent[n] = GFC_DESCRIPTOR_EXTENT(array,dim);
|
| + rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
|
| + sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
|
|
|
| - hstride[n] = h->dim[n].stride;
|
| + hstride[n] = GFC_DESCRIPTOR_STRIDE(h,n);
|
| n++;
|
| }
|
| }
|
| @@ -241,8 +265,7 @@ eoshift1_16 (gfc_array_char * const restrict ret,
|
| const char * const restrict pbound,
|
| const GFC_INTEGER_16 * const restrict pwhich)
|
| {
|
| - eoshift1 (ret, array, h, pbound, pwhich, GFC_DESCRIPTOR_SIZE (array),
|
| - "\0", 1);
|
| + eoshift1 (ret, array, h, pbound, pwhich, "\0", 1);
|
| }
|
|
|
|
|
| @@ -262,10 +285,10 @@ eoshift1_16_char (gfc_array_char * const restrict ret,
|
| const gfc_array_i16 * const restrict h,
|
| const char * const restrict pbound,
|
| const GFC_INTEGER_16 * const restrict pwhich,
|
| - GFC_INTEGER_4 array_length,
|
| + GFC_INTEGER_4 array_length __attribute__((unused)),
|
| GFC_INTEGER_4 bound_length __attribute__((unused)))
|
| {
|
| - eoshift1 (ret, array, h, pbound, pwhich, array_length, " ", 1);
|
| + eoshift1 (ret, array, h, pbound, pwhich, " ", 1);
|
| }
|
|
|
|
|
| @@ -285,11 +308,11 @@ eoshift1_16_char4 (gfc_array_char * const restrict ret,
|
| const gfc_array_i16 * const restrict h,
|
| const char * const restrict pbound,
|
| const GFC_INTEGER_16 * const restrict pwhich,
|
| - GFC_INTEGER_4 array_length,
|
| + GFC_INTEGER_4 array_length __attribute__((unused)),
|
| GFC_INTEGER_4 bound_length __attribute__((unused)))
|
| {
|
| static const gfc_char4_t space = (unsigned char) ' ';
|
| - eoshift1 (ret, array, h, pbound, pwhich, array_length * sizeof (gfc_char4_t),
|
| + eoshift1 (ret, array, h, pbound, pwhich,
|
| (const char *) &space, sizeof (gfc_char4_t));
|
| }
|
|
|
|
|