diff options
Diffstat (limited to 'libgfortran/intrinsics/transpose_generic.c')
-rw-r--r-- | libgfortran/intrinsics/transpose_generic.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libgfortran/intrinsics/transpose_generic.c b/libgfortran/intrinsics/transpose_generic.c index d72ae5a4b81..b9bdbe4a041 100644 --- a/libgfortran/intrinsics/transpose_generic.c +++ b/libgfortran/intrinsics/transpose_generic.c @@ -43,6 +43,23 @@ __transpose (gfc_array_char * ret, gfc_array_char * source) && GFC_DESCRIPTOR_RANK (ret) == 2); size = GFC_DESCRIPTOR_SIZE (source); + + 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; + + 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 (size * size0 ((array_t*)ret)); + ret->base = 0; + } + sxstride = source->dim[0].stride * size; if (sxstride == 0) sxstride = size; |