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);