From: Mikael Morin <[email protected]>
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.
---
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 b2ef36070b6..8cee990206e 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 ca1943fdaea..79786c32ecd 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 53cda9cc59a..406189af157 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));
--
2.53.0