[gcc(refs/users/mikael/heads/refactor_descriptor_v05)] Correction régression class_dummy_7
Mikael Morin
mikael@gcc.gnu.org
Fri Jun 13 15:05:45 GMT 2025
https://gcc.gnu.org/g:119fedaa59a36f05f487bf44892f4ebbdbced68a
commit 119fedaa59a36f05f487bf44892f4ebbdbced68a
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Sat May 17 18:38:46 2025 +0200
Correction régression class_dummy_7
Correction régression pr63331
Diff:
---
gcc/fortran/trans-array.cc | 16 +++++++++++++++-
gcc/fortran/trans-decl.cc | 2 +-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 9bdf0b05022e..ca518b007477 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -6281,7 +6281,21 @@ gfc_trans_array_bounds (tree type, gfc_symbol * sym, tree * poffset,
offset = gfc_index_zero_node;
tree spacing = GFC_TYPE_ARRAY_SPACING (type, 0);
if (spacing && VAR_P (spacing))
- gfc_add_modify (pblock, spacing, elem_len);
+ {
+ tree spacing0;
+ if (sym->ts.type == BT_CLASS
+ && DECL_LANG_SPECIFIC (sym->backend_decl)
+ && GFC_DECL_SAVED_DESCRIPTOR (sym->backend_decl))
+ {
+ tree class_desc = GFC_DECL_SAVED_DESCRIPTOR (sym->backend_decl);
+ tree array_desc = gfc_class_data_get (class_desc);
+ spacing0 = gfc_conv_array_spacing (array_desc, 0);
+ }
+ else
+ spacing0 = elem_len;
+
+ gfc_add_modify (pblock, spacing, spacing0);
+ }
for (dim = 0; dim < as->rank; dim++)
{
/* Evaluate non-constant array bound expressions.
diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index b23be5937e7a..8e1dcbb8c1ec 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -1345,7 +1345,7 @@ gfc_build_dummy_array_decl (gfc_symbol * sym, tree dummy)
are not repacked. */
if (!flag_repack_arrays || sym->attr.target)
{
- if (as->type == AS_ASSUMED_SIZE)
+ if (as->type == AS_ASSUMED_SIZE && !is_classarray)
packed = PACKED_FULL;
}
else
More information about the Gcc-cvs
mailing list