https://gcc.gnu.org/g:79818220cff77a11d732ab7bff2a327cf8d8e8b6
commit 79818220cff77a11d732ab7bff2a327cf8d8e8b6 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Sat Jan 4 17:43:49 2025 +0100 Correction régression sizeof_6 Diff: --- gcc/fortran/trans-array.cc | 15 ++++++++++++++- gcc/fortran/trans-expr.cc | 5 +++-- gcc/fortran/trans.h | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index d42575c38485..5d56a12ebf71 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -9901,8 +9901,21 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, bool g77, if (maybe_shift && !keep_descriptor_lower_bound (expr)) conv_shift_descriptor (&block, se->expr, expr->rank); + bool assumed_rank_fsym; + if (fsym + && ((fsym->ts.type == BT_CLASS + && CLASS_DATA (fsym)->as + && CLASS_DATA (fsym)->as->type == AS_ASSUMED_RANK) + || (fsym->ts.type != BT_CLASS + && fsym->as + && fsym->as->type == AS_ASSUMED_RANK))) + assumed_rank_fsym = true; + else + assumed_rank_fsym = false; + tmp = gfc_class_data_get (ctree); - gfc_copy_sequence_descriptor (block, tmp, se->expr); + gfc_copy_sequence_descriptor (block, tmp, se->expr, + assumed_rank_fsym); /* Handle optional. */ if (fsym && fsym->attr.optional && sym && sym->attr.optional) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 09a8fc9dd5dd..5dff9692f0ba 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -847,13 +847,14 @@ descriptor_rank (tree descriptor) void -gfc_copy_sequence_descriptor (stmtblock_t &block, tree lhs_desc, tree rhs_desc) +gfc_copy_sequence_descriptor (stmtblock_t &block, tree lhs_desc, tree rhs_desc, + bool assumed_rank_lhs) { int lhs_rank = descriptor_rank (lhs_desc); int rhs_rank = descriptor_rank (rhs_desc); tree desc; - if (lhs_rank == rhs_rank) + if (assumed_rank_lhs || lhs_rank == rhs_rank) desc = rhs_desc; else { diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 544cf3fb6497..2ad3a98cf4f6 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -465,7 +465,7 @@ void gfc_finalize_tree_expr (gfc_se *, gfc_symbol *, symbol_attribute, int); bool gfc_assignment_finalizer_call (gfc_se *, gfc_expr *, bool); void gfc_class_array_data_assign (stmtblock_t *, tree, tree, bool); -void gfc_copy_sequence_descriptor (stmtblock_t &, tree, tree); +void gfc_copy_sequence_descriptor (stmtblock_t &, tree, tree, bool); void gfc_conv_derived_to_class (gfc_se *, gfc_expr *, gfc_symbol *fsym, tree, bool, bool, const char *, tree * = nullptr); void gfc_conv_class_to_class (gfc_se *, gfc_expr *, gfc_typespec, bool, bool,