[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Extraction gfc_set_descriptor_from_scalar
Mikael Morin
mikael@gcc.gnu.org
Sat Sep 20 13:13:25 GMT 2025
https://gcc.gnu.org/g:9702bd8d43e389b516efdc49ab380da51417af7b
commit 9702bd8d43e389b516efdc49ab380da51417af7b
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Thu Aug 7 14:11:43 2025 +0200
Extraction gfc_set_descriptor_from_scalar
Correction gfc_get_scalar_to_descriptor_type
Renommage set_descriptor_from_scalar{,_class}
Diff:
---
gcc/fortran/trans-descriptor.cc | 17 +++++++++++++++++
gcc/fortran/trans-descriptor.h | 4 ++--
gcc/fortran/trans-expr.cc | 13 +------------
3 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index a73717f043e6..a3de865f73b6 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -933,3 +933,20 @@ gfc_create_null_actual_descriptor (stmtblock_t *block, gfc_typespec *ts,
return desc;
}
+
+
+void
+gfc_set_descriptor_from_scalar_class (stmtblock_t *block, tree descr,
+ tree scalar, gfc_expr *scalar_expr)
+{
+ tree 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));
+
+ tree tmp = gfc_class_data_get (scalar);
+ if (!POINTER_TYPE_P (TREE_TYPE (tmp)))
+ tmp = gfc_build_addr_expr (NULL_TREE, tmp);
+
+ gfc_conv_descriptor_data_set (block, descr, tmp);
+}
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index 4cbcc56f24b3..c7285529acf7 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -25,8 +25,6 @@ void gfc_set_scalar_null_descriptor (stmtblock_t *block, tree, gfc_symbol *, gfc
void gfc_set_descriptor_with_shape (stmtblock_t *, tree, tree,
gfc_expr *, locus *);
tree gfc_get_scalar_to_descriptor_type (tree scalar, symbol_attribute attr);
-void gfc_set_descriptor_from_scalar (stmtblock_t *, tree, tree,
- symbol_attribute *, tree = NULL_TREE);
void gfc_copy_sequence_descriptor (stmtblock_t &, tree, tree, bool);
void gfc_set_gfc_from_cfi (stmtblock_t *, stmtblock_t *, tree, tree, tree,
gfc_symbol *, bool, bool, bool);
@@ -102,4 +100,6 @@ 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 *);
+
#endif /* GFC_TRANS_DESCRIPTOR_H */
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index e437366858f5..13558b5ed6c4 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -1311,18 +1311,7 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, gfc_typespec class_ts,
&& e->rank != class_ts.u.derived->components->as->rank)
{
if (e->rank == 0)
- {
- tree type = gfc_get_scalar_to_descriptor_type (TREE_TYPE (parmse->expr),
- gfc_expr_attr (e));
- gfc_conv_descriptor_dtype_set (&block, 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);
- }
+ gfc_set_descriptor_from_scalar_class (&block, ctree, parmse->expr, e);
else
gfc_class_array_data_assign (&block, ctree, parmse->expr, false);
}
More information about the Gcc-cvs
mailing list