[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:b581bd0df631c1ee2028a244f82b7ca87230a05f

commit b581bd0df631c1ee2028a244f82b7ca87230a05f
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 eaae67094650..1c45c88b665e 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2590,7 +2590,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;
@@ -2637,5 +2637,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 4c99c3ed3243..9df22d7b0ba5 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -133,6 +133,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.