[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