diff options
Diffstat (limited to 'libgfortran/runtime/in_pack_generic.c')
-rw-r--r-- | libgfortran/runtime/in_pack_generic.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/libgfortran/runtime/in_pack_generic.c b/libgfortran/runtime/in_pack_generic.c index 99fdb92436f..23810cf8320 100644 --- a/libgfortran/runtime/in_pack_generic.c +++ b/libgfortran/runtime/in_pack_generic.c @@ -52,6 +52,7 @@ internal_pack (gfc_array_char * source) int n; int packed; index_type size; + int type; if (source->dim[0].stride == 0) { @@ -59,14 +60,36 @@ internal_pack (gfc_array_char * source) return source->data; } + type = GFC_DESCRIPTOR_TYPE (source); size = GFC_DESCRIPTOR_SIZE (source); - switch (size) + switch (type) { - case 4: - return internal_pack_4 ((gfc_array_i4 *)source); - - case 8: - return internal_pack_8 ((gfc_array_i8 *)source); + case GFC_DTYPE_INTEGER: + case GFC_DTYPE_LOGICAL: + case GFC_DTYPE_REAL: + switch (size) + { + case 4: + return internal_pack_4 ((gfc_array_i4 *)source); + + case 8: + return internal_pack_8 ((gfc_array_i8 *)source); + } + break; + + case GFC_DTYPE_COMPLEX: + switch (size) + { + case 8: + return internal_pack_c4 ((gfc_array_c4 *)source); + + case 16: + return internal_pack_c8 ((gfc_array_c8 *)source); + } + break; + + default: + break; } dim = GFC_DESCRIPTOR_RANK (source); |