[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Suppression gfc_conv_descriptor_dimension compil' OK
Mikael Morin
mikael@gcc.gnu.org
Fri Sep 12 17:53:38 GMT 2025
https://gcc.gnu.org/g:d49656e0fc7106efa9379bcfd4369190f401625d
commit d49656e0fc7106efa9379bcfd4369190f401625d
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Sun Jun 29 14:28:16 2025 +0200
Suppression gfc_conv_descriptor_dimension compil' OK
Suppression non_lvalue dimension_get
ajout location dimension_set
Diff:
---
gcc/fortran/trans-array.cc | 10 +++++-----
gcc/fortran/trans-descriptor.cc | 35 ++++++++++++++++++++++++++++++++---
gcc/fortran/trans-descriptor.h | 5 ++++-
3 files changed, 41 insertions(+), 9 deletions(-)
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index be2eef61ac95..1fc95f54312a 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -9068,11 +9068,11 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, bool g77,
for (int i = 0; i < expr->rank; i++)
{
- old_field = gfc_conv_descriptor_dimension (old_desc,
- gfc_rank_cst[get_array_ref_dim_for_loop_dim (ss, i)]);
- new_field = gfc_conv_descriptor_dimension (new_desc,
- gfc_rank_cst[i]);
- gfc_add_modify (&se->pre, new_field, old_field);
+ int idx = get_array_ref_dim_for_loop_dim (ss, i);
+ old_field = gfc_conv_descriptor_dimension_get (old_desc, idx);
+ gfc_conv_descriptor_dimension_set (&se->pre, new_desc, i,
+ old_field);
+
}
if (flag_coarray == GFC_FCOARRAY_LIB
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 9d04a4801233..578dcb21ef06 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -468,8 +468,8 @@ gfc_get_descriptor_dimension (tree desc)
}
-tree
-gfc_conv_descriptor_dimension (tree desc, tree dim)
+static tree
+get_descriptor_dimension (tree desc, tree dim)
{
tree tmp;
@@ -478,6 +478,35 @@ gfc_conv_descriptor_dimension (tree desc, tree dim)
return gfc_build_array_ref (tmp, dim, NULL_TREE, true);
}
+tree
+gfc_conv_descriptor_dimension_get (tree desc, tree dim)
+{
+ return get_descriptor_dimension (desc, dim);
+}
+
+tree
+gfc_conv_descriptor_dimension_get (tree desc, int dim)
+{
+ return gfc_conv_descriptor_dimension_get (desc, gfc_rank_cst[dim]);
+}
+
+void
+gfc_conv_descriptor_dimension_set (stmtblock_t *block, tree desc, tree dim,
+ tree value)
+{
+ location_t loc = input_location;
+ tree t = get_descriptor_dimension (desc, dim);
+ gfc_add_modify_loc (loc, block, t,
+ fold_convert_loc (loc, TREE_TYPE (t), value));
+}
+
+void
+gfc_conv_descriptor_dimension_set (stmtblock_t *block, tree desc, int dim,
+ tree value)
+{
+ gfc_conv_descriptor_dimension_set (block, desc, gfc_rank_cst[dim], value);
+}
+
tree
gfc_conv_descriptor_token (tree desc)
@@ -493,7 +522,7 @@ gfc_conv_descriptor_token (tree desc)
static tree
gfc_conv_descriptor_subfield (tree desc, tree dim, unsigned field_idx)
{
- tree tmp = gfc_conv_descriptor_dimension (desc, dim);
+ tree tmp = get_descriptor_dimension (desc, dim);
tree field = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (tmp)), field_idx);
gcc_assert (field != NULL_TREE);
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index 69cc4f3e2ac6..0547157bf2af 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -49,7 +49,6 @@ tree gfc_get_cfi_dim_sm (tree desc, tree idx);
tree gfc_get_descriptor_dimension (tree desc);
-tree gfc_conv_descriptor_dimension (tree desc, tree dim);
tree gfc_conv_descriptor_token (tree desc);
tree gfc_conv_descriptor_data_get (tree desc);
@@ -61,6 +60,8 @@ tree gfc_conv_descriptor_rank_get (tree desc);
tree gfc_conv_descriptor_type_get (tree desc);
tree gfc_conv_descriptor_span_get (tree desc);
+tree gfc_conv_descriptor_dimension_get (tree desc, tree dim);
+tree gfc_conv_descriptor_dimension_get (tree desc, int dim);
tree gfc_conv_descriptor_stride_get (tree desc, tree dim);
tree gfc_conv_descriptor_lbound_get (tree desc, tree dim);
tree gfc_conv_descriptor_ubound_get (tree desc, tree dim);
@@ -77,6 +78,8 @@ void gfc_conv_descriptor_type_set (stmtblock_t *block, tree desc, tree value);
tree gfc_conv_descriptor_type_set (tree desc, tree value);
tree gfc_conv_descriptor_type_set (tree desc, int value);
void gfc_conv_descriptor_span_set (stmtblock_t *block, tree desc, tree value);
+void gfc_conv_descriptor_dimension_set (stmtblock_t *block, tree desc, tree dim, tree value);
+void gfc_conv_descriptor_dimension_set (stmtblock_t *block, tree desc, int dim, tree value);
void gfc_conv_descriptor_stride_set (stmtblock_t *block, tree desc, tree dim, tree value);
void gfc_conv_descriptor_lbound_set (stmtblock_t *block, tree desc, tree dim, tree value);
void gfc_conv_descriptor_ubound_set (stmtblock_t *block, tree desc, tree dim, tree value);
More information about the Gcc-cvs
mailing list