[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Déplacemement plus de code gfc_set_pdt_array_descriptor
Mikael Morin
mikael@gcc.gnu.org
Wed Sep 17 19:59:32 GMT 2025
https://gcc.gnu.org/g:b47af53ec6195aceea7bebd364793c5a7f0cb115
commit b47af53ec6195aceea7bebd364793c5a7f0cb115
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Thu Jul 31 15:19:35 2025 +0200
Déplacemement plus de code gfc_set_pdt_array_descriptor
Diff:
---
gcc/fortran/trans-array.cc | 19 ++++++++-----------
gcc/fortran/trans-descriptor.cc | 8 +++++++-
gcc/fortran/trans-descriptor.h | 2 +-
3 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 9036c318a1af..06e6418591d5 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -10154,24 +10154,21 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest,
if (c->attr.pdt_array)
{
- tree nelts = gfc_set_pdt_array_descriptor (&fnblock, comp, c->as,
- pdt_param_list);
-
+ tree elt_size;
if (c->ts.type == BT_CLASS)
{
tmp = gfc_get_vptr_from_expr (comp);
if (POINTER_TYPE_P (TREE_TYPE (tmp)))
tmp = build_fold_indirect_ref_loc (input_location, tmp);
- tmp = gfc_vptr_size_get (tmp);
+ elt_size = gfc_vptr_size_get (tmp);
}
else
- tmp = TYPE_SIZE_UNIT (gfc_get_element_type (ctype));
- tmp = fold_convert (gfc_array_index_type, tmp);
- tree size = fold_build2_loc (input_location, MULT_EXPR,
- gfc_array_index_type, nelts, tmp);
- size = gfc_evaluate_now (size, &fnblock);
- tmp = gfc_call_malloc (&fnblock, NULL, size);
- gfc_conv_descriptor_data_set (&fnblock, comp, tmp);
+ elt_size = TYPE_SIZE_UNIT (gfc_get_element_type (ctype));
+ elt_size = fold_convert (gfc_array_index_type, elt_size);
+
+ tree size = gfc_set_pdt_array_descriptor (&fnblock, comp, c->as,
+ pdt_param_list,
+ elt_size);
if (c->initializer && c->initializer->rank)
{
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 23b5186c84a7..a885ad4d77aa 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2417,7 +2417,7 @@ gfc_set_descriptor_for_assign_realloc (stmtblock_t *block, gfc_loopinfo *loop,
tree
gfc_set_pdt_array_descriptor (stmtblock_t *block, tree descr,
gfc_array_spec *as,
- gfc_actual_arglist *pdt_param_list)
+ gfc_actual_arglist *pdt_param_list, tree elt_size)
{
gfc_se tse;
tree size = gfc_index_one_node;
@@ -2460,5 +2460,11 @@ gfc_set_pdt_array_descriptor (stmtblock_t *block, tree descr,
gfc_conv_descriptor_dtype_set (block, descr,
gfc_get_dtype (TREE_TYPE (descr)));
+ size = fold_build2_loc (input_location, MULT_EXPR,
+ gfc_array_index_type, size, elt_size);
+ size = gfc_evaluate_now (size, block);
+ gfc_conv_descriptor_data_set (block, descr,
+ gfc_call_malloc (block, NULL, size));
+
return size;
}
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index 1f1668180d63..33ed46d1c47a 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -146,6 +146,6 @@ void gfc_set_descriptor_for_assign_realloc (stmtblock_t *, gfc_loopinfo *,
gfc_expr *, gfc_expr *, tree, tree,
tree, tree, bool);
tree gfc_set_pdt_array_descriptor (stmtblock_t *, tree, gfc_array_spec *,
- gfc_actual_arglist *);
+ gfc_actual_arglist *, tree);
#endif /* GFC_TRANS_DESCRIPTOR_H */
More information about the Gcc-cvs
mailing list