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)

Reply via email to