https://gcc.gnu.org/g:1cf83ca57ee19c672c6b385db2e7c0fac3d73de6
commit 1cf83ca57ee19c672c6b385db2e7c0fac3d73de6 Author: Mikael Morin <[email protected]> Date: Tue Oct 13 17:31:12 2026 +0200 Sauvegarde modifs Correction attribut dimension Inversion dimension allocatable Diff: --- gcc/fortran/symbol.cc | 20 +++++++++++++------- gcc/fortran/trans-expr.cc | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc index 73f0280645d7..5adaba1e734c 100644 --- a/gcc/fortran/symbol.cc +++ b/gcc/fortran/symbol.cc @@ -5715,16 +5715,22 @@ gfc_dummy_requires_direct_arg (gfc_symbol *sym) { return sym->attr.dummy && sym->attr.target - && sym->attr.dimension && !sym->attr.value && !sym->attr.contiguous - && !sym->attr.pointer - && !sym->attr.allocatable - && sym->ts.type != BT_CLASS + && !IS_POINTER (sym) && sym->ts.type != BT_ASSUMED - && sym->as - && (sym->as->type == AS_ASSUMED_SHAPE - || sym->as->type == AS_ASSUMED_RANK); + && ((sym->ts.type == BT_CLASS + && sym->ts.u.derived->attr.is_class + && CLASS_DATA (sym)->attr.dimension + && !CLASS_DATA (sym)->attr.allocatable + && CLASS_DATA (sym)->as + && (CLASS_DATA (sym)->as->type == AS_ASSUMED_SHAPE + || CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)) + || (sym->attr.dimension + && !sym->attr.allocatable + && sym->as + && (sym->as->type == AS_ASSUMED_SHAPE + || sym->as->type == AS_ASSUMED_RANK))); } diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 265bc1c02dd2..55c4e326b771 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -7152,7 +7152,8 @@ copy_in_out_allowed (gfc_symbol *fsym, gfc_expr *e, bool nodesc_arg) if (fsym == NULL || nodesc_arg || gfc_has_vector_subscript (e)) return true; - if (gfc_dummy_requires_direct_arg (fsym)) + if (fsym->ts.type != BT_CLASS + && gfc_dummy_requires_direct_arg (fsym)) return false; return !(fsym->attr.pointer && !fsym->attr.contiguous && fsym->as
