[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Extraction gfc_set_descriptor_from_scalar
Mikael Morin
mikael@gcc.gnu.org
Sat Sep 6 17:22:17 GMT 2025
https://gcc.gnu.org/g:9c131b38a654fdd57140a4693a303644edefbe23
commit 9c131b38a654fdd57140a4693a303644edefbe23
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Tue Jul 22 21:03:11 2025 +0200
Extraction gfc_set_descriptor_from_scalar
Diff:
---
gcc/fortran/trans-descriptor.cc | 20 ++++++++++++++++++++
gcc/fortran/trans-descriptor.h | 2 ++
gcc/fortran/trans-expr.cc | 16 ++--------------
3 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index a3de865f73b6..ff59042049e9 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -950,3 +950,23 @@ gfc_set_descriptor_from_scalar_class (stmtblock_t *block, tree descr,
gfc_conv_descriptor_data_set (block, descr, tmp);
}
+
+
+void
+gfc_set_descriptor_from_scalar (stmtblock_t *block, tree descr,
+ tree scalar, gfc_expr *scalar_expr,
+ tree cond_presence)
+{
+ tree type;
+ type = gfc_get_scalar_to_descriptor_type (TREE_TYPE (scalar),
+ gfc_expr_attr (scalar_expr));
+ gfc_conv_descriptor_dtype_set (block, descr,
+ gfc_get_dtype (type));
+ if (cond_presence)
+ scalar = build3_loc (input_location, COND_EXPR,
+ TREE_TYPE (scalar),
+ cond_presence, scalar,
+ fold_convert (TREE_TYPE (scalar),
+ null_pointer_node));
+ gfc_conv_descriptor_data_set (block, descr, scalar);
+}
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index c7285529acf7..2848dcc01a4e 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -101,5 +101,7 @@ tree gfc_create_null_actual_descriptor (stmtblock_t *, gfc_typespec *,
void gfc_init_descriptor_variable (stmtblock_t *block, gfc_symbol *sym, tree descr);
void gfc_set_descriptor_from_scalar_class (stmtblock_t *, tree, tree, gfc_expr *);
+void gfc_set_descriptor_from_scalar (stmtblock_t *, tree, tree, gfc_expr *,
+ tree);
#endif /* GFC_TRANS_DESCRIPTOR_H */
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 7741d5ef0246..9c6b93a85cf9 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -901,20 +901,8 @@ gfc_conv_derived_to_class (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym,
/* Scalar to an assumed-rank array. */
if (fsym->ts.u.derived->components->as)
- {
- tree type;
- type = gfc_get_scalar_to_descriptor_type (TREE_TYPE (parmse->expr),
- gfc_expr_attr (e));
- gfc_conv_descriptor_dtype_set (&parmse->pre, ctree,
- gfc_get_dtype (type));
- if (optional)
- parmse->expr = build3_loc (input_location, COND_EXPR,
- TREE_TYPE (parmse->expr),
- cond_optional, parmse->expr,
- fold_convert (TREE_TYPE (parmse->expr),
- null_pointer_node));
- gfc_conv_descriptor_data_set (&parmse->pre, ctree, parmse->expr);
- }
+ gfc_set_descriptor_from_scalar (&parmse->pre, ctree,
+ parmse->expr, e, cond_optional);
else
{
tmp = fold_convert (TREE_TYPE (ctree), parmse->expr);
More information about the Gcc-cvs
mailing list