https://gcc.gnu.org/g:31c5fd9592ec877b279db778b4cd3f37d56bd7e8

commit 31c5fd9592ec877b279db778b4cd3f37d56bd7e8
Author: Mikael Morin <[email protected]>
Date:   Fri Oct 9 12:16:05 2026 +0200

    Sauvegarde modifs

Diff:
---
 gcc/fortran/trans-expr.cc | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 265bc1c02dd2..7c11c26dbbae 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -11954,15 +11954,31 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, 
gfc_expr * expr2)
              gfc_conv_descriptor_data_set (&block, desc, data);
 
              /* Copy the span.  */
-             if (VAR_P (rse.expr)
-                 && GFC_DECL_PTR_ARRAY_P (rse.expr))
-               span = gfc_conv_descriptor_span_get (rse.expr);
-             else
+             if (expr2->ts.type != BT_CLASS
+                 && expr2->ts.type != BT_CHARACTER
+                 && (expr2->ts.type != BT_DERIVED
+                     || !expr2->ts.u.derived->attr.pdt_type))
                {
                  tmp = TREE_TYPE (rse.expr);
                  tmp = TYPE_SIZE_UNIT (gfc_get_element_type (tmp));
                  span = fold_convert (gfc_array_index_type, tmp);
                }
+             else if (expr2->ts.type == BT_CLASS
+                      && (rse.class_vptr || rse.class_container)
+                      && gfc_is_simply_contiguous (expr2, false, true))
+               {
+                 tree vptr;
+                 if (rse.class_vptr)
+                   vptr = rse.class_vptr;
+                 else
+                   {
+                     gcc_assert (rse.class_container);
+                     vptr = gfc_class_vptr_get (rse.class_container);
+                   }
+                 span = gfc_vptr_size_get (vptr);
+               }
+             else
+               span = gfc_conv_array_span (rse.expr);
              gfc_conv_descriptor_span_set (&block, desc, span);
 
              /* Copy offset but adjust it such that it would correspond

Reply via email to