[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Extraction gfc_copy_sequence_descriptor
Mikael Morin
mikael@gcc.gnu.org
Fri Sep 19 19:17:55 GMT 2025
https://gcc.gnu.org/g:a2550c0bfb08d69656d43196ccf0ec1201b46e9f
commit a2550c0bfb08d69656d43196ccf0ec1201b46e9f
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Wed Jul 23 16:34:39 2025 +0200
Extraction gfc_copy_sequence_descriptor
Diff:
---
gcc/fortran/trans-array.cc | 18 +-----------------
gcc/fortran/trans-descriptor.cc | 20 ++++++++++++++++++++
gcc/fortran/trans-descriptor.h | 2 ++
3 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 92b5abe9d92a..902fb3512865 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -8833,23 +8833,7 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, bool g77,
&& CLASS_DATA (fsym)->as->type == AS_EXPLICIT && !no_pack)
{
tree arr = gfc_create_var (TREE_TYPE (tmp), "parm");
- gfc_conv_descriptor_data_set (&block, arr,
- gfc_conv_descriptor_data_get (
- se->expr));
- gfc_conv_descriptor_lbound_set (&block, arr, gfc_index_zero_node,
- gfc_index_zero_node);
- gfc_conv_descriptor_ubound_set (
- &block, arr, gfc_index_zero_node,
- gfc_conv_descriptor_size (se->expr, expr->rank));
- gfc_conv_descriptor_stride_set (
- &block, arr, gfc_index_zero_node,
- gfc_conv_descriptor_stride_get (se->expr, gfc_index_zero_node));
- tree tmp2 = gfc_conv_descriptor_dtype_get (se->expr);
- gfc_conv_descriptor_dtype_set (&block, arr, tmp2);
- gfc_conv_descriptor_rank_set (&block, arr, 1);
- gfc_conv_descriptor_span_set (&block, arr,
- gfc_conv_descriptor_span_get (arr));
- gfc_conv_descriptor_offset_set (&block, arr, gfc_index_zero_node);
+ gfc_copy_sequence_descriptor (&block, arr, se->expr, expr->rank);
se->expr = arr;
}
gfc_class_array_data_assign (&block, tmp, se->expr, true);
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index e8058752bd81..d5ca4d4fb82f 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -1250,3 +1250,23 @@ gfc_shift_descriptor (stmtblock_t *block, tree descr, int rank,
gfc_conv_descriptor_offset_set (block, descr, offset);
}
+
+
+void
+gfc_copy_sequence_descriptor (stmtblock_t *block, tree dest, tree src, int rank)
+{
+ gfc_conv_descriptor_data_set (block, dest,
+ gfc_conv_descriptor_data_get (src));
+ gfc_conv_descriptor_lbound_set (block, dest, gfc_index_zero_node,
+ gfc_index_zero_node);
+ gfc_conv_descriptor_ubound_set (block, dest, gfc_index_zero_node,
+ gfc_conv_descriptor_size (src, rank));
+ tree stride = gfc_conv_descriptor_stride_get (src, gfc_index_zero_node);
+ gfc_conv_descriptor_stride_set (block, dest, gfc_index_zero_node, stride);
+ gfc_conv_descriptor_dtype_set (block, dest,
+ gfc_conv_descriptor_dtype_get (src));
+ gfc_conv_descriptor_rank_set (block, dest, 1);
+ gfc_conv_descriptor_span_set (block, dest,
+ gfc_conv_descriptor_span_get (src));
+ gfc_conv_descriptor_offset_set (block, dest, gfc_index_zero_node);
+}
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index ebb43a10bcdf..cb920ff2cbbb 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -107,6 +107,8 @@ void gfc_set_subarray_descriptor (stmtblock_t *, tree, tree, gfc_expr *, gfc_exp
void gfc_shift_descriptor (stmtblock_t *, tree, int, tree [GFC_MAX_DIMENSIONS],
tree [GFC_MAX_DIMENSIONS]);
+void gfc_copy_sequence_descriptor (stmtblock_t *, tree, tree, int);
+
void gfc_set_descriptor_from_scalar_class (stmtblock_t *, tree, tree, gfc_expr *);
void gfc_set_descriptor_from_scalar (stmtblock_t *, tree, tree, symbol_attribute,
tree = NULL_TREE, tree = NULL_TREE);
More information about the Gcc-cvs
mailing list