[gcc(refs/users/mikael/heads/refactor_descriptor_v05)] Correction régression assign_10

Mikael Morin mikael@gcc.gnu.org
Fri Jun 13 15:09:29 GMT 2025


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

commit ab0521ab992ca6ec2fb90a2894b5887d8aca303e
Author: Mikael Morin <mikael@gcc.gnu.org>
Date:   Mon May 26 22:49:46 2025 +0200

    Correction régression assign_10

Diff:
---
 gcc/fortran/trans-array.cc      |  2 +-
 gcc/fortran/trans-descriptor.cc | 10 +++++++++-
 gcc/fortran/trans-descriptor.h  |  2 +-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 27d8dda70573..dc4c0399cb2f 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -7825,7 +7825,7 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr)
 
       gfc_set_descriptor (&loop.pre, parm, desc, expr, loop.dimen, codim,
 			  ss, info, loop.from, loop.to, !se->data_not_needed,
-			  subref_array_target);
+			  subref_array_target, !se->direct_byref);
 
       desc = parm;
     }
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index e41809f0037a..600c1bd43a5a 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2955,6 +2955,9 @@ gfc_set_temporary_descriptor (stmtblock_t *block, tree desc, tree class_src,
 	  tree this_lbound = shift_bounds ? gfc_index_zero_node : lbound[n];
 	  set_descriptor_dimension (block, desc, n, this_lbound, ubound[n],
 				    spacing[n], &offset, nullptr);
+	  if (TREE_CODE (spacing[n]) == INTEGER_CST
+	      && GFC_TYPE_ARRAY_SPACING (TREE_TYPE (desc), n) == NULL_TREE)
+	    GFC_TYPE_ARRAY_SPACING (TREE_TYPE (desc), n) = spacing[n];
 	}
     }
 
@@ -3024,7 +3027,7 @@ gfc_set_descriptor (stmtblock_t *block, tree dest, tree src, gfc_expr *src_expr,
 		    int rank, int corank, gfc_ss *ss, gfc_array_info *info,
 		    tree lowers[GFC_MAX_DIMENSIONS],
 		    tree uppers[GFC_MAX_DIMENSIONS], bool data_needed,
-		    bool subref)
+		    bool subref, bool update_spacing_in_type)
 {
   int ndim = info->ref ? info->ref->u.ar.dimen : rank;
 
@@ -3138,6 +3141,11 @@ gfc_set_descriptor (stmtblock_t *block, tree dest, tree src, gfc_expr *src_expr,
       offset = fold_build2_loc (input_location, MINUS_EXPR,
 			       TREE_TYPE (offset), offset, tmp);
 
+      if (update_spacing_in_type
+	  && TREE_CODE (spacing) == INTEGER_CST
+	  && GFC_TYPE_ARRAY_SPACING (TREE_TYPE (dest), dim) == NULL_TREE)
+	GFC_TYPE_ARRAY_SPACING (TREE_TYPE (dest), dim) = spacing;
+
       /* Store the new spacing.  */
       gfc_conv_descriptor_spacing_set (block, dest, gfc_rank_cst[dim], spacing);
     }
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index e431aeb9a7a3..4c4c82d227ab 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -91,7 +91,7 @@ void gfc_set_temporary_descriptor (stmtblock_t *, tree, tree, tree, tree,
 
 void gfc_set_descriptor (stmtblock_t *, tree, tree, gfc_expr *, int, int,
 			 gfc_ss *, gfc_array_info *, tree [GFC_MAX_DIMENSIONS],
-			 tree [GFC_MAX_DIMENSIONS], bool, bool);
+			 tree [GFC_MAX_DIMENSIONS], bool, bool, bool);
 
 tree gfc_descr_init_count (tree, int, int, gfc_expr **, gfc_expr **,
 			   stmtblock_t *, stmtblock_t *, tree *, tree,


More information about the Gcc-cvs mailing list