diff options
Diffstat (limited to 'libgfortran/intrinsics/pack_generic.c')
-rw-r--r-- | libgfortran/intrinsics/pack_generic.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libgfortran/intrinsics/pack_generic.c b/libgfortran/intrinsics/pack_generic.c index 1b0d7250540..06e70844bf0 100644 --- a/libgfortran/intrinsics/pack_generic.c +++ b/libgfortran/intrinsics/pack_generic.c @@ -93,15 +93,19 @@ pack_internal (gfc_array_char *ret, const gfc_array_char *array, index_type count[GFC_MAX_DIMENSIONS]; index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; index_type n; index_type dim; index_type nelem; dim = GFC_DESCRIPTOR_RANK (array); + zero_sized = 0; for (n = 0; n < dim; n++) { count[n] = 0; extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; sstride[n] = array->dim[n].stride * size; mstride[n] = mask->dim[n].stride; } @@ -154,6 +158,8 @@ pack_internal (gfc_array_char *ret, const gfc_array_char *array, const GFC_LOGICAL_4 *m = mptr; total = 0; + if (zero_sized) + m = NULL; while (m) { |