[gcc(refs/users/mikael/heads/refactor_descriptor_v05)] Correction régression class_allocate_19
Mikael Morin
mikael@gcc.gnu.org
Fri Jun 13 15:01:26 GMT 2025
https://gcc.gnu.org/g:836db860ebe7d59ad9baf5d64987ba1109738622
commit 836db860ebe7d59ad9baf5d64987ba1109738622
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Fri May 2 15:31:33 2025 +0200
Correction régression class_allocate_19
Diff:
---
gcc/fortran/trans-array.cc | 17 +++++++++++++----
gcc/fortran/trans-descriptor.cc | 5 +++--
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 9963b10f4fa8..fd15c3eec0f2 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -5512,8 +5512,8 @@ gfc_set_delta (gfc_loopinfo *loop)
static tree
-descriptor_element_size (tree descriptor, tree expr3_elem_size,
- gfc_expr *expr3)
+descriptor_element_size (tree descriptor, gfc_typespec *explicit_ts,
+ tree expr3_elem_size, gfc_expr *expr3)
{
tree type;
tree tmp;
@@ -5544,7 +5544,15 @@ descriptor_element_size (tree descriptor, tree expr3_elem_size,
}
}
else
- tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type));
+ {
+ tree element_type;
+ if (explicit_ts)
+ element_type = gfc_typenode_for_spec (explicit_ts);
+ else
+ element_type = gfc_get_element_type (type);
+
+ tmp = TYPE_SIZE_UNIT (element_type);
+ }
/* Convert to size_t. */
return fold_convert (size_type_node, tmp);
@@ -5778,7 +5786,8 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg,
gfc_init_block (&set_descriptor_block);
- element_size = descriptor_element_size (se->expr, expr3_elem_size, expr3);
+ element_size = descriptor_element_size (se->expr, explicit_ts,
+ expr3_elem_size, expr3);
tree empty_array_cond;
/* Take the corank only from the actual ref and not from the coref. The
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 5f40e0e5f8c2..dff7bbb87d83 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -3281,9 +3281,10 @@ gfc_descr_init_count (tree descriptor, int rank, int corank, gfc_expr ** lower,
else
gfc_conv_descriptor_dtype_set (pblock, descriptor, gfc_get_dtype (type));
+ gfc_conv_descriptor_elem_len_set (pblock, descriptor, element_size);
+
tree empty_cond = logical_false_node;
- spacing = gfc_conv_descriptor_elem_len_get (descriptor);
- spacing = fold_convert_loc (input_location, gfc_array_index_type, spacing);
+ spacing = fold_convert_loc (input_location, gfc_array_index_type, element_size);
for (n = 0; n < rank; n++)
{
More information about the Gcc-cvs
mailing list