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

commit e06df85f61849048cf2b2bb9bdd1f764175d9e01
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Sun Jun 29 14:11:50 2025 +0200

    Suppression gfc_conv_descriptor_type compil' OK

Diff:
---
 gcc/fortran/trans-decl.cc       |  2 +-
 gcc/fortran/trans-descriptor.cc | 19 +++++++++++++++++--
 gcc/fortran/trans-descriptor.h  |  3 ++-
 gcc/fortran/trans-expr.cc       |  2 +-
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index fda3f34682ec..e3e41cc6c12d 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -7283,7 +7283,7 @@ gfc_conv_cfi_to_gfc (stmtblock_t *init, stmtblock_t 
*finally,
       ctype = fold_build2_loc (input_location, BIT_AND_EXPR, TREE_TYPE (ctype),
                               ctype, build_int_cst (TREE_TYPE (ctype),
                                                     CFI_type_mask));
-      tree type = gfc_conv_descriptor_type (gfc_desc);
+      tree type = gfc_conv_descriptor_type_get (gfc_desc);
 
       /* if (CFI_type_cptr) BT_VOID else BT_UNKNOWN  */
       /* Note: BT_VOID is could also be CFI_type_funcptr, but assume c_ptr. */
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 77ef2e16e13b..e0e41636b443 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -391,8 +391,9 @@ gfc_conv_descriptor_attribute (tree desc)
                          dtype, tmp, NULL_TREE);
 }
 
-tree
-gfc_conv_descriptor_type (tree desc)
+
+static tree
+get_descriptor_type (tree desc)
 {
   tree tmp;
   tree dtype;
@@ -405,6 +406,20 @@ gfc_conv_descriptor_type (tree desc)
                          dtype, tmp, NULL_TREE);
 }
 
+tree
+gfc_conv_descriptor_type_get (tree desc)
+{
+  return non_lvalue_loc (input_location, get_descriptor_type (desc));
+}
+
+void
+gfc_conv_descriptor_type_set (stmtblock_t *block, tree desc, tree value)
+{
+  tree t = get_descriptor_type (desc);
+  gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
+}
+
+
 tree
 gfc_get_descriptor_dimension (tree desc)
 {
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index 54420824c8eb..d552d1991489 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -30,7 +30,6 @@ tree gfc_get_cfi_dim_sm (tree desc, tree idx);
 
 
 tree gfc_conv_descriptor_attribute (tree desc);
-tree gfc_conv_descriptor_type (tree desc);
 tree gfc_get_descriptor_dimension (tree desc);
 tree gfc_conv_descriptor_dimension (tree desc, tree dim);
 tree gfc_conv_descriptor_token (tree desc);
@@ -41,6 +40,7 @@ tree gfc_conv_descriptor_dtype_get (tree desc);
 tree gfc_conv_descriptor_elem_len_get (tree desc);
 tree gfc_conv_descriptor_version_get (tree desc);
 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_stride_get (tree desc, tree dim);
@@ -55,6 +55,7 @@ void gfc_conv_descriptor_elem_len_set (stmtblock_t *block, 
tree desc, tree value
 void gfc_conv_descriptor_version_set (stmtblock_t *block, tree desc, tree 
value);
 void gfc_conv_descriptor_rank_set (stmtblock_t *block, tree desc, tree value);
 void gfc_conv_descriptor_rank_set (stmtblock_t *block, tree desc, int value);
+void gfc_conv_descriptor_type_set (stmtblock_t *block, tree desc, int value);
 void gfc_conv_descriptor_span_set (stmtblock_t *block, tree desc, 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);
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index bbc9a2cd315d..d46c43857dc7 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -6228,7 +6228,7 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr 
*e, gfc_symbol *fsym)
       tree cond;
       tree ctype = gfc_get_cfi_desc_type (cfi);
       tree type = fold_convert (TREE_TYPE (ctype),
-                               gfc_conv_descriptor_type (gfc));
+                               gfc_conv_descriptor_type_get (gfc));
       tree kind = fold_convert (TREE_TYPE (ctype),
                                gfc_conv_descriptor_elem_len_get (gfc));
       kind = fold_build2_loc (input_location, LSHIFT_EXPR, TREE_TYPE (type),

Reply via email to