summaryrefslogtreecommitdiff
path: root/libgfortran/intrinsics/transpose_generic.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran/intrinsics/transpose_generic.c')
-rw-r--r--libgfortran/intrinsics/transpose_generic.c17
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;