https://gcc.gnu.org/g:e5551d0f7ac3f36e207a6f71e6be78c0ffa4707e
commit e5551d0f7ac3f36e207a6f71e6be78c0ffa4707e Author: Mikael Morin <mik...@gcc.gnu.org> Date: Wed Apr 30 19:54:14 2025 +0200 Correction régression char_unpack_2 Diff: --- libgfortran/intrinsics/unpack_generic.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libgfortran/intrinsics/unpack_generic.c b/libgfortran/intrinsics/unpack_generic.c index 21624ce44b92..42842972f7ae 100644 --- a/libgfortran/intrinsics/unpack_generic.c +++ b/libgfortran/intrinsics/unpack_generic.c @@ -121,9 +121,6 @@ unpack_internal (gfc_array_char *ret, const gfc_array_char *vector, spacing); extent[n] = GFC_DESCRIPTOR_EXTENT(ret,n); empty = empty || extent[n] <= 0; - rstride[n] = GFC_DESCRIPTOR_SPACING(ret, n); - fstride[n] = GFC_DESCRIPTOR_SPACING(field, n); - mstride[n] = GFC_DESCRIPTOR_SPACING(mask, n); rs *= extent[n]; spacing *= extent[n]; } @@ -138,12 +135,17 @@ unpack_internal (gfc_array_char *ret, const gfc_array_char *vector, count[n] = 0; extent[n] = GFC_DESCRIPTOR_EXTENT(ret,n); empty = empty || extent[n] <= 0; - rstride[n] = GFC_DESCRIPTOR_SPACING(ret, n); - fstride[n] = GFC_DESCRIPTOR_SPACING(field, n); - mstride[n] = GFC_DESCRIPTOR_SPACING(mask, n); } } + bool scalar_field = GFC_DESCRIPTOR_RANK (field) == 0; + for (n = 0; n < dim; n++) + { + rstride[n] = GFC_DESCRIPTOR_SPACING(ret, n); + mstride[n] = GFC_DESCRIPTOR_SPACING(mask, n); + fstride[n] = scalar_field ? 0 : GFC_DESCRIPTOR_SPACING(field, n); + } + if (empty) return;