https://gcc.gnu.org/g:b76ced46e23bb4c6ae61434cde12dec2b34224e1

commit b76ced46e23bb4c6ae61434cde12dec2b34224e1
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Jan 28 21:03:24 2025 +0100

    Factorisation set_descriptor_from_scalar dans conv_class_to_class

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

diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index a5cd0a452d81..54f23a1d20c2 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -172,6 +172,19 @@ gfc_conv_null_array_descriptor (gfc_se *se, gfc_symbol 
*sym, gfc_expr *expr)
 }
 
 
+void
+set_descriptor_from_scalar (stmtblock_t *block, tree desc, tree scalar,
+                           gfc_expr *scalar_expr)
+{
+  tree type = get_scalar_to_descriptor_type (scalar,
+                                            gfc_expr_attr (scalar_expr));
+  gfc_add_modify (block, gfc_conv_descriptor_dtype (desc),
+                 gfc_get_dtype (type));
+
+  gfc_conv_descriptor_data_set (block, desc, scalar);
+}
+
+
 tree
 gfc_conv_scalar_to_descriptor (gfc_se *se, tree scalar, symbol_attribute attr)
 {
@@ -1435,16 +1448,11 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, 
gfc_typespec class_ts,
     {
       if (e->rank == 0)
        {
-         tree type = get_scalar_to_descriptor_type (parmse->expr,
-                                                    gfc_expr_attr (e));
-         gfc_add_modify (&block, gfc_conv_descriptor_dtype (ctree),
-                         gfc_get_dtype (type));
-
          tmp = gfc_class_data_get (parmse->expr);
          if (!POINTER_TYPE_P (TREE_TYPE (tmp)))
            tmp = gfc_build_addr_expr (NULL_TREE, tmp);
 
-         gfc_conv_descriptor_data_set (&block, ctree, tmp);
+         set_descriptor_from_scalar (&block, ctree, tmp, e);
        }
       else
        gfc_class_array_data_assign (&block, ctree, parmse->expr, false);

Reply via email to