[gcc(refs/users/mikael/heads/refactor_descriptor_v205.01)] fortran: array descriptor: Move absent descriptor initialization [PR122521]
Mikael Morin via Gcc-cvs <[email protected]> Sun, 2 Aug 2026 09:41:16 +0000 (GMT)
| Newsgroups | gmane.comp.gcc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://gcc.gnu.org/g:6778aeee4b7f943b861c5799129753c118fdb966 commit 6778aeee4b7f943b861c5799129753c118fdb966 Author: Mikael Morin <[email protected]> Date: Sun Aug 2 11:12:05 2026 +0200 fortran: array descriptor: Move absent descriptor initialization [PR122521] 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));