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); |
} |