https://gcc.gnu.org/g:bebab4cd13ba1c1fa9447b4cb20e84cc3d8cacb1
commit bebab4cd13ba1c1fa9447b4cb20e84cc3d8cacb1 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Tue Dec 10 20:08:37 2024 +0100 Annulation suppression else Diff: --- gcc/fortran/trans-decl.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 652f1bac3d7e..dff435d53acb 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -5055,11 +5055,22 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) se.want_pointer = 1; gfc_conv_expr (&se, e); } - else + else if (sym->ts.type == BT_CLASS + && !CLASS_DATA (sym)->attr.dimension + && !CLASS_DATA (sym)->attr.codimension) { se.want_pointer = 1; gfc_conv_expr (&se, e); } + else + { + se.descriptor_only = 1; + gfc_conv_expr (&se, e); + descriptor = se.expr; + se.expr = gfc_conv_descriptor_data_addr (se.expr); + se.expr = build_fold_indirect_ref_loc (input_location, + se.expr); + } gfc_free_expr (e); if (!sym->attr.dummy || sym->attr.intent == INTENT_OUT)