https://gcc.gnu.org/g:3abacd9955003ebe49f1596ea3748e8ee1297ede

commit 3abacd9955003ebe49f1596ea3748e8ee1297ede
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;

Reply via email to