https://gcc.gnu.org/g:a81f56144fab193a7c64f79ea0bc0f45328d25ef

commit a81f56144fab193a7c64f79ea0bc0f45328d25ef
Author: Mikael Morin <[email protected]>
Date:   Wed Aug 6 18:46:44 2025 +0200

    fortran: array descriptor: Factor setters
    
    All the setters use similar code.  Introduce a function to factor repeated
    code.
    
    gcc/fortran/ChangeLog:
    
            * trans-descriptor.cc (set_value): New function.
            (gfc_conv_descriptor_data_set, gfc_conv_descriptor_offset_set,
            gfc_conv_descriptor_dtype_set, gfc_conv_descriptor_span_set,
            gfc_conv_descriptor_rank_set, gfc_conv_descriptor_version_set,
            gfc_conv_descriptor_elem_len_set, gfc_conv_descriptor_type_set,
            gfc_conv_descriptor_dimension_set, gfc_conv_descriptor_token_set,
            gfc_conv_descriptor_stride_set, gfc_conv_descriptor_lbound_set,
            gfc_conv_descriptor_ubound_set): Use it.

Diff:
---
 gcc/fortran/trans-descriptor.cc | 73 ++++++++++++-----------------------------
 1 file changed, 21 insertions(+), 52 deletions(-)

diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 4b7c3d0700d2..a43553b2e4de 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -95,6 +95,14 @@ get_descr_comp (tree desc, unsigned field_idx, tree type = 
NULL_TREE)
   return get_ref_comp (desc, field_idx, type);
 }
 
+void
+set_value (stmtblock_t *block, tree ref, tree value)
+{
+  location_t loc = input_location;
+  gfc_add_modify_loc (loc, block, ref,
+                     fold_convert_loc (loc, TREE_TYPE (ref), value));
+}
+
 
 /* Return a reference to the data field of the array descriptor DESC.  */
 
@@ -124,10 +132,7 @@ gfc_conv_descriptor_data_get (tree desc)
 void
 gfc_conv_descriptor_data_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree field = conv_descriptor_data (desc);
-  gfc_add_modify_loc (loc, block, field,
-                     fold_convert_loc (loc, TREE_TYPE (field), value));
+  set_value (block, conv_descriptor_data (desc), value);
 }
 
 
@@ -146,10 +151,7 @@ gfc_conv_descriptor_offset_get (tree desc)
 void
 gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_offset (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_offset (desc), value);
 }
 
 
@@ -175,10 +177,7 @@ gfc_conv_descriptor_dtype_get (tree desc)
 void
 gfc_conv_descriptor_dtype_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_dtype (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_dtype (desc), value);
 }
 
 
@@ -197,10 +196,7 @@ gfc_conv_descriptor_span_get (tree desc)
 void
 gfc_conv_descriptor_span_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = gfc_conv_descriptor_span (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, gfc_conv_descriptor_span (desc), value);
 }
 
 
@@ -233,10 +229,7 @@ gfc_conv_descriptor_rank_get (tree desc)
 void
 gfc_conv_descriptor_rank_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_rank (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_rank (desc), value);
 }
 
 /* Add code to BLOCK setting to VALUE the rank of the array descriptor DESC.  
*/
@@ -269,10 +262,7 @@ gfc_conv_descriptor_version_get (tree desc)
 void
 gfc_conv_descriptor_version_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_version (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_version (desc), value);
 }
 
 
@@ -298,10 +288,7 @@ gfc_conv_descriptor_elem_len_get (tree desc)
 void
 gfc_conv_descriptor_elem_len_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_elem_len (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_elem_len (desc), value);
 }
 
 
@@ -327,10 +314,7 @@ gfc_conv_descriptor_type_get (tree desc)
 void
 gfc_conv_descriptor_type_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_type (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_type (desc), value);
 }
 
 /* Add code to BLOCK setting to VALUE the type discriminator of the array
@@ -425,10 +409,7 @@ void
 gfc_conv_descriptor_dimension_set (stmtblock_t *block, tree desc, tree dim,
                                   tree value)
 {
-  location_t loc = input_location;
-  tree t = conv_descriptor_dimension (desc, dim);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, conv_descriptor_dimension (desc, dim), value);
 }
 
 /* Add code to BLOCK setting to VALUE the array access information of the
@@ -459,10 +440,7 @@ gfc_conv_descriptor_token (tree desc)
 void
 gfc_conv_descriptor_token_set (stmtblock_t *block, tree desc, tree value)
 {
-  location_t loc = input_location;
-  tree t = gfc_conv_descriptor_token (desc);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, gfc_conv_descriptor_token (desc), value);
 }
 
 
@@ -511,10 +489,7 @@ void
 gfc_conv_descriptor_stride_set (stmtblock_t *block, tree desc,
                                tree dim, tree value)
 {
-  location_t loc = input_location;
-  tree t = get_descriptor_stride (desc, dim);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, get_descriptor_stride (desc, dim), value);
 }
 
 
@@ -543,10 +518,7 @@ void
 gfc_conv_descriptor_lbound_set (stmtblock_t *block, tree desc,
                                tree dim, tree value)
 {
-  location_t loc = input_location;
-  tree t = get_descriptor_lbound (desc, dim);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, get_descriptor_lbound (desc, dim), value);
 }
 
 
@@ -575,10 +547,7 @@ void
 gfc_conv_descriptor_ubound_set (stmtblock_t *block, tree desc,
                                tree dim, tree value)
 {
-  location_t loc = input_location;
-  tree t = get_descriptor_ubound (desc, dim);
-  gfc_add_modify_loc (loc, block, t,
-                     fold_convert_loc (loc, TREE_TYPE (t), value));
+  set_value (block, get_descriptor_ubound (desc, dim), value);
 }

Reply via email to