| Index: gcc/libgfortran/intrinsics/transpose_generic.c
|
| diff --git a/gcc/libgfortran/intrinsics/transpose_generic.c b/gcc/libgfortran/intrinsics/transpose_generic.c
|
| index 25856192a6cb97036e636a50e7b96acd96fb097d..b0c2fff57196b99e145150bb35bcbe7080d57380 100644
|
| --- a/gcc/libgfortran/intrinsics/transpose_generic.c
|
| +++ b/gcc/libgfortran/intrinsics/transpose_generic.c
|
| @@ -32,8 +32,7 @@ extern void transpose (gfc_array_char *, gfc_array_char *);
|
| export_proto(transpose);
|
|
|
| static void
|
| -transpose_internal (gfc_array_char *ret, gfc_array_char *source,
|
| - index_type size)
|
| +transpose_internal (gfc_array_char *ret, gfc_array_char *source)
|
| {
|
| /* r.* indicates the return array. */
|
| index_type rxstride, rystride;
|
| @@ -44,21 +43,22 @@ transpose_internal (gfc_array_char *ret, gfc_array_char *source,
|
|
|
| index_type xcount, ycount;
|
| index_type x, y;
|
| + index_type size;
|
|
|
| assert (GFC_DESCRIPTOR_RANK (source) == 2
|
| && GFC_DESCRIPTOR_RANK (ret) == 2);
|
|
|
| + size = GFC_DESCRIPTOR_SIZE(ret);
|
| +
|
| if (ret->data == NULL)
|
| {
|
| 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;
|
| + GFC_DIMENSION_SET(ret->dim[0], 0, GFC_DESCRIPTOR_EXTENT(source,1) - 1,
|
| + 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;
|
| + GFC_DIMENSION_SET(ret->dim[1], 0, GFC_DESCRIPTOR_EXTENT(source,0) - 1,
|
| + GFC_DESCRIPTOR_EXTENT(source, 1));
|
|
|
| ret->data = internal_malloc_size (size * size0 ((array_t*)ret));
|
| ret->offset = 0;
|
| @@ -67,8 +67,8 @@ transpose_internal (gfc_array_char *ret, gfc_array_char *source,
|
| {
|
| index_type ret_extent, src_extent;
|
|
|
| - ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound;
|
| - src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound;
|
| + ret_extent = GFC_DESCRIPTOR_EXTENT(ret,0);
|
| + src_extent = GFC_DESCRIPTOR_EXTENT(source,1);
|
|
|
| if (src_extent != ret_extent)
|
| runtime_error ("Incorrect extent in return value of TRANSPOSE"
|
| @@ -76,8 +76,8 @@ transpose_internal (gfc_array_char *ret, gfc_array_char *source,
|
| " should be %ld", (long int) src_extent,
|
| (long int) ret_extent);
|
|
|
| - ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound;
|
| - src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound;
|
| + ret_extent = GFC_DESCRIPTOR_EXTENT(ret,1);
|
| + src_extent = GFC_DESCRIPTOR_EXTENT(source,0);
|
|
|
| if (src_extent != ret_extent)
|
| runtime_error ("Incorrect extent in return value of TRANSPOSE"
|
| @@ -87,13 +87,13 @@ transpose_internal (gfc_array_char *ret, gfc_array_char *source,
|
|
|
| }
|
|
|
| - sxstride = source->dim[0].stride * size;
|
| - systride = source->dim[1].stride * size;
|
| - xcount = source->dim[0].ubound + 1 - source->dim[0].lbound;
|
| - ycount = source->dim[1].ubound + 1 - source->dim[1].lbound;
|
| + sxstride = GFC_DESCRIPTOR_STRIDE_BYTES(source,0);
|
| + systride = GFC_DESCRIPTOR_STRIDE_BYTES(source,1);
|
| + xcount = GFC_DESCRIPTOR_EXTENT(source,0);
|
| + ycount = GFC_DESCRIPTOR_EXTENT(source,1);
|
|
|
| - rxstride = ret->dim[0].stride * size;
|
| - rystride = ret->dim[1].stride * size;
|
| + rxstride = GFC_DESCRIPTOR_STRIDE_BYTES(ret,0);
|
| + rystride = GFC_DESCRIPTOR_STRIDE_BYTES(ret,1);
|
|
|
| rptr = ret->data;
|
| sptr = source->data;
|
| @@ -119,7 +119,7 @@ export_proto(transpose);
|
| void
|
| transpose (gfc_array_char *ret, gfc_array_char *source)
|
| {
|
| - transpose_internal (ret, source, GFC_DESCRIPTOR_SIZE (source));
|
| + transpose_internal (ret, source);
|
| }
|
|
|
|
|
| @@ -130,9 +130,10 @@ export_proto(transpose_char);
|
| void
|
| transpose_char (gfc_array_char *ret,
|
| GFC_INTEGER_4 ret_length __attribute__((unused)),
|
| - gfc_array_char *source, GFC_INTEGER_4 source_length)
|
| + gfc_array_char *source,
|
| + GFC_INTEGER_4 source_length __attribute__((unused)))
|
| {
|
| - transpose_internal (ret, source, source_length);
|
| + transpose_internal (ret, source);
|
| }
|
|
|
|
|
| @@ -143,7 +144,8 @@ export_proto(transpose_char4);
|
| void
|
| transpose_char4 (gfc_array_char *ret,
|
| GFC_INTEGER_4 ret_length __attribute__((unused)),
|
| - gfc_array_char *source, GFC_INTEGER_4 source_length)
|
| + gfc_array_char *source,
|
| + GFC_INTEGER_4 source_length __attribute__((unused)))
|
| {
|
| - transpose_internal (ret, source, source_length * sizeof (gfc_char4_t));
|
| + transpose_internal (ret, source);
|
| }
|
|
|