[gcc(refs/users/mikael/heads/refactor_descriptor_v291 .01)] Déplacemement plus de code gfc_set_pdt_a rray_descriptor
Mikael Morin via Gcc-cvs <[email protected]>
| Newsgroups | gmane.comp.gcc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://gcc.gnu.org/g:2d0ddc4f8a4b825143c66042a3d0ef746676dd27 commit 2d0ddc4f8a4b825143c66042a3d0ef746676dd27 Author: Mikael Morin <[email protected]> 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 5d0a052905f9..95dcdef8a50d 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -10633,24 +10633,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 287d193c4d31..7b334ce4a0c6 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -2605,7 +2605,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; @@ -2652,5 +2652,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 2c968af9b6e4..5cbb600e56a7 100644 --- a/gcc/fortran/trans-descriptor.h +++ b/gcc/fortran/trans-descriptor.h @@ -135,6 +135,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 */