https://gcc.gnu.org/g:db885725a6ac6b33a772ca81a16a3bd41fbd6cae

commit db885725a6ac6b33a772ca81a16a3bd41fbd6cae
Author: Mikael Morin <[email protected]>
Date:   Tue Jul 14 20:53:37 2026 +0200

    Correction pr106945

Diff:
---
 gcc/fortran/trans-array.cc | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 6d73b2370e90..3075cae8b6c4 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -10670,13 +10670,6 @@ structure_alloc_comps (gfc_symbol * der_type, tree 
decl, tree dest,
              else
                nelems = build_int_cst (size_type_node, 1);
 
-             if (CLASS_DATA (c)->attr.dimension
-                 || CLASS_DATA (c)->attr.codimension)
-               {
-                 src_data = gfc_conv_descriptor_data_get (src_data);
-                 dst_data = gfc_conv_descriptor_data_get (dst_data);
-               }
-
              gfc_init_block (&tmpblock);
 
              gfc_add_modify (&tmpblock, gfc_class_vptr_get (dcmp),
@@ -10710,9 +10703,17 @@ structure_alloc_comps (gfc_symbol * der_type, tree 
decl, tree dest,
              tmp = gfc_finish_block (&tmpblock);
 
              gfc_init_block (&tmpblock);
-             gfc_add_modify (&tmpblock, dst_data,
-                             fold_convert (TREE_TYPE (dst_data),
-                                           null_pointer_node));
+             if (CLASS_DATA (c)->attr.dimension
+                 || CLASS_DATA (c)->attr.codimension)
+               {
+                 gfc_conv_descriptor_data_set (&tmpblock, dst_data,
+                                               null_pointer_node);
+                 src_data = gfc_conv_descriptor_data_get (src_data);
+               }
+             else
+               gfc_add_modify (&tmpblock, dst_data,
+                               fold_convert (TREE_TYPE (dst_data),
+                                             null_pointer_node));
              null_data = gfc_finish_block (&tmpblock);
 
              null_cond = fold_build2_loc (input_location, NE_EXPR,

Reply via email to