[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Refactoring get_type_field
Mikael Morin
mikael@gcc.gnu.org
Wed Sep 17 17:32:38 GMT 2025
https://gcc.gnu.org/g:81e356e1ad206b716b79e15522210b4b91518b8b
commit 81e356e1ad206b716b79e15522210b4b91518b8b
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Wed Aug 6 14:26:53 2025 +0200
Refactoring get_type_field
Diff:
---
gcc/fortran/trans-descriptor.cc | 31 +++++++++++--------------------
1 file changed, 11 insertions(+), 20 deletions(-)
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index b54910a5e93c..6888ff508d67 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -174,10 +174,12 @@ gfc_get_cfi_dim_sm (tree desc, tree idx)
static tree
-get_type_field (tree type, unsigned field_idx)
+get_type_field (tree type, unsigned field_idx, tree field_type = NULL_TREE)
{
tree field = gfc_advance_chain (TYPE_FIELDS (type), field_idx);
- gcc_assert (field != NULL_TREE);
+ gcc_assert (field != NULL_TREE
+ && (field_type == NULL_TREE
+ || TREE_TYPE (field) == field_type));
return field;
}
@@ -186,22 +188,19 @@ get_type_field (tree type, unsigned field_idx)
static tree
get_ref_comp (tree ref, unsigned field_idx, tree type = NULL_TREE)
{
- tree field = get_type_field (TREE_TYPE (ref), field_idx);
- gcc_assert (field != NULL_TREE
- && (type == NULL_TREE
- || TREE_TYPE (field) == type));
-
+ tree field = get_type_field (TREE_TYPE (ref), field_idx, type);
return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (field),
ref, field, NULL_TREE);
}
static tree
-gfc_get_descriptor_field (tree desc, unsigned field_idx)
+gfc_get_descriptor_field (tree desc, unsigned field_idx,
+ tree type = NULL_TREE)
{
gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)));
- return get_ref_comp (desc, field_idx);
+ return get_ref_comp (desc, field_idx, type);
}
@@ -245,9 +244,7 @@ gfc_conv_descriptor_data_set (stmtblock_t *block, tree desc, tree value)
static tree
get_descriptor_offset (tree desc)
{
- tree field = gfc_get_descriptor_field (desc, OFFSET_FIELD);
- gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
- return field;
+ return gfc_get_descriptor_field (desc, OFFSET_FIELD, gfc_array_index_type);
}
tree
@@ -267,9 +264,7 @@ gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc, tree value)
static tree
get_descriptor_dtype (tree desc)
{
- tree field = gfc_get_descriptor_field (desc, DTYPE_FIELD);
- gcc_assert (TREE_TYPE (field) == get_dtype_type_node ());
- return field;
+ return gfc_get_descriptor_field (desc, DTYPE_FIELD, get_dtype_type_node ());
}
tree
@@ -291,9 +286,7 @@ gfc_conv_descriptor_dtype_set (stmtblock_t *block, tree desc, tree value)
static tree
gfc_conv_descriptor_span (tree desc)
{
- tree field = gfc_get_descriptor_field (desc, SPAN_FIELD);
- gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
- return field;
+ return gfc_get_descriptor_field (desc, SPAN_FIELD, gfc_array_index_type);
}
tree
@@ -423,10 +416,8 @@ gfc_conv_descriptor_type_set (stmtblock_t *block, tree desc, int value)
gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
tree dtype = get_type_field (type, DTYPE_FIELD);
- gcc_assert (dtype != NULL_TREE);
tree field = get_type_field (TREE_TYPE (dtype), GFC_DTYPE_TYPE);
- gcc_assert (field != NULL_TREE);
tree type_value = build_int_cst (TREE_TYPE (field), value);
gfc_conv_descriptor_type_set (block, desc, type_value);
More information about the Gcc-cvs
mailing list