[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 */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.