[gcc(refs/users/mikael/heads/refactor_descriptor_v206.01)] fortran: array descriptor: Move absent descriptor initialization [PR122521]

Mikael Morin via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:bdd922350ecd113618c4623dad3d03b2e8d2e1fe

commit bdd922350ecd113618c4623dad3d03b2e8d2e1fe
Author: Mikael Morin <[email protected]>
Date:   Sun Aug 2 11:12:05 2026 +0200

    fortran: array descriptor: Move absent descriptor initialization [PR122521]
    
    Fortran-tested on aarch64-unknown-linux-gnu.  OK for mainline?
    
    -- >8 --
    
    Absent assumed shape arguments are represented by array descriptors whose
    data pointer field is initialized to null.  Move the code generating that
    initialization to its own function in trans-descriptor.cc.
    
            PR fortran/122521
    
    gcc/fortran/ChangeLog:
    
            * trans-expr.cc (gfc_conv_derived_to_class): Move absent array
            descriptor initialization ...
            * trans-descriptor.cc (gfc_init_absent_descriptor): ... here as a
            new function.
            * trans-descriptor.h (gfc_init_absent_descriptor): New declaration.

Diff:
---
 gcc/fortran/trans-descriptor.cc | 10 ++++++++++
 gcc/fortran/trans-descriptor.h  |  1 +
 gcc/fortran/trans-expr.cc       |  5 ++---
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index b2ef36070b67..8cee990206e4 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -736,6 +736,16 @@ gfc_init_result_descriptor (stmtblock_t *block, tree descr)
 }
 
 
+/* Add code to BLOCK initializing array descriptor DESCR so that it represents
+   an absent actual argument associated with an optional dummy.  */
+
+void
+gfc_init_absent_descriptor (stmtblock_t *block, tree descr)
+{
+  gfc_conv_descriptor_data_set (block, descr, null_pointer_node);
+}
+
+
 /* For an array descriptor, get the total number of elements.  This is just
    the product of the extents along from_dim to to_dim.  */
 
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index ca1943fdaea0..79786c32ecdf 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -65,6 +65,7 @@ tree gfc_build_null_descriptor (tree type);
 
 void gfc_nullify_descriptor (stmtblock_t *block, tree);
 void gfc_init_result_descriptor (stmtblock_t *block, tree descr);
+void gfc_init_absent_descriptor (stmtblock_t *block, tree descr);
 
 tree gfc_conv_descriptor_size (tree, int);
 tree gfc_conv_descriptor_cosize (tree, int, int);
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 53cda9cc59aa..406189af1571 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -1069,10 +1069,9 @@ gfc_conv_derived_to_class (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym,
 	      tmp = gfc_finish_block (&block);
 
 	      gfc_init_block (&block);
-	      gfc_conv_descriptor_data_set (&block, ctree, null_pointer_node);
+	      gfc_init_absent_descriptor (&block, ctree);
 	      if (derived_array && *derived_array != NULL_TREE)
-		gfc_conv_descriptor_data_set (&block, *derived_array,
-					      null_pointer_node);
+		gfc_init_absent_descriptor (&block, *derived_array);
 
 	      tmp = build3_v (COND_EXPR, cond_optional, tmp,
 			      gfc_finish_block (&block));
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.