From: Mikael Morin <[email protected]>

Fortran-tested on aarch64-unknown-linux-gnu, pushed.
This could have been integrated into another version of the last array
descriptor series [1], but I considered this change simple enough I could
just proceed.

[1] fortran: array descriptor part 2: Add getters and setters
  https://gcc.gnu.org/pipermail/gcc-patches/2026-July/723604.html
  https://gcc.gnu.org/pipermail/fortran/2026-July/064287.html

-- >8 --

A MODIFY_EXPR was generated manually using the data reference returned by
the getter.  Just use the setter instead.  Fixed in two different places.

gcc/fortran/ChangeLog:

        * trans-expr.cc (gfc_conv_class_to_class): Use the data setter
        instead of generating a MODIFY_EXPR of the result of the data
        getter.
        * trans-intrinsic.cc (conv_intrinsic_move_alloc): Likewise.
---
 gcc/fortran/trans-expr.cc      | 6 ++----
 gcc/fortran/trans-intrinsic.cc | 4 +---
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index df029bfd114..1083ea3fbbd 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -1556,10 +1556,8 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, 
gfc_typespec class_ts,
       else
        {
          gfc_init_block (&block);
-
-         tmp2 = gfc_conv_descriptor_data_get (gfc_class_data_get (var));
-         gfc_add_modify (&block, tmp2, fold_convert (TREE_TYPE (tmp2),
-                                                     null_pointer_node));
+         gfc_conv_descriptor_data_set (&block, gfc_class_data_get (var),
+                                       null_pointer_node);
          tmp2 = gfc_finish_block (&block);
        }
 
diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc
index bb0499ad7b3..5e3681da467 100644
--- a/gcc/fortran/trans-intrinsic.cc
+++ b/gcc/fortran/trans-intrinsic.cc
@@ -13599,9 +13599,7 @@ conv_intrinsic_move_alloc (gfc_code *code)
   gfc_add_modify_loc (input_location, &block, to_se.expr, from_se.expr);
 
   /* Set "from" to NULL.  */
-  tmp = gfc_conv_descriptor_data_get (from_se.expr);
-  gfc_add_modify_loc (input_location, &block, tmp,
-                     fold_convert (TREE_TYPE (tmp), null_pointer_node));
+  gfc_conv_descriptor_data_set (&block, from_se.expr, null_pointer_node);
 
   if (coarray && flag_coarray == GFC_FCOARRAY_LIB)
     {
-- 
2.53.0

Reply via email to