[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Extraction gfc_set_empty_descriptor_bounds
Mikael Morin
mikael@gcc.gnu.org
Fri Sep 12 17:59:45 GMT 2025
https://gcc.gnu.org/g:35967a139e4d7e3ff9468cd4504848034f28ba0d
commit 35967a139e4d7e3ff9468cd4504848034f28ba0d
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Thu Jul 31 17:47:15 2025 +0200
Extraction gfc_set_empty_descriptor_bounds
Diff:
---
gcc/fortran/trans-array.cc | 18 ++----------------
gcc/fortran/trans-descriptor.cc | 17 +++++++++++++++++
gcc/fortran/trans-descriptor.h | 1 +
3 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index a0ab5a284015..7449670d2f52 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -10396,7 +10396,6 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
stmtblock_t realloc_block;
stmtblock_t alloc_block;
stmtblock_t fblock;
- stmtblock_t loop_pre_block;
gfc_ref *ref;
gfc_ss *rss;
gfc_ss *lss;
@@ -10495,22 +10494,9 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
tree guard = gfc_create_var (logical_type_node, "unallocated_init_guard");
gfc_add_modify (&unalloc_init_block, guard, logical_false_node);
+ stmtblock_t loop_pre_block;
gfc_start_block (&loop_pre_block);
- for (n = 0; n < expr1->rank; n++)
- {
- gfc_conv_descriptor_lbound_set (&loop_pre_block, desc,
- gfc_rank_cst[n],
- gfc_index_one_node);
- gfc_conv_descriptor_ubound_set (&loop_pre_block, desc,
- gfc_rank_cst[n],
- gfc_index_zero_node);
- gfc_conv_descriptor_stride_set (&loop_pre_block, desc,
- gfc_rank_cst[n],
- gfc_index_zero_node);
- }
-
- gfc_conv_descriptor_offset_set (&loop_pre_block, desc,
- gfc_index_zero_node);
+ gfc_set_empty_descriptor_bounds (&loop_pre_block, desc, expr1->rank);
tmp = fold_build2_loc (input_location, EQ_EXPR,
logical_type_node, array1,
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 867daf831f53..048184afb76b 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2790,3 +2790,20 @@ gfc_descriptor_init_count (tree descriptor, int rank, int corank,
return stride;
}
+
+void
+gfc_set_empty_descriptor_bounds (stmtblock_t *block, tree descr, int rank)
+{
+ for (int n = 0; n < rank; n++)
+ {
+ gfc_conv_descriptor_lbound_set (block, descr, gfc_rank_cst[n],
+ gfc_index_one_node);
+ gfc_conv_descriptor_ubound_set (block, descr, gfc_rank_cst[n],
+ gfc_index_zero_node);
+ gfc_conv_descriptor_stride_set (block, descr, gfc_rank_cst[n],
+ gfc_index_zero_node);
+ }
+
+ gfc_conv_descriptor_offset_set (block, descr, gfc_index_zero_node);
+}
+
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index c3b33f3d5c2f..381389b826ad 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -153,5 +153,6 @@ gfc_descriptor_init_count (tree, int, int, gfc_expr **, gfc_expr **,
stmtblock_t * pblock, stmtblock_t *, tree *,
tree, gfc_expr *, tree, bool, gfc_expr *, tree,
bool, tree *);
+void gfc_set_empty_descriptor_bounds (stmtblock_t *, tree, int);
#endif /* GFC_TRANS_DESCRIPTOR_H */
More information about the Gcc-cvs
mailing list