[gcc(refs/users/mikael/heads/refactor_descriptor_v291.01)] Extraction gfc_create_unallocated_library_result_descriptor
Mikael Morin via Gcc-cvs <[email protected]>
| Newsgroups | gmane.comp.gcc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://gcc.gnu.org/g:37107c6109f5526b2495f4609ed1f3a14acffd54 commit 37107c6109f5526b2495f4609ed1f3a14acffd54 Author: Mikael Morin <[email protected]> Date: Wed Sep 10 20:38:07 2025 +0200 Extraction gfc_create_unallocated_library_result_descriptor Déplacement gfc_create_unallocated_library_result_descriptor Diff: --- gcc/fortran/trans-descriptor.cc | 17 +++++++++++++++++ gcc/fortran/trans-descriptor.h | 2 ++ gcc/fortran/trans-expr.cc | 10 ++-------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 3b2ffd91b1d0..aa490a165588 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -958,3 +958,20 @@ gfc_init_descriptor_variable (stmtblock_t *block, gfc_symbol *sym, tree descr) { return gfc_init_descriptor_variable (block, sym, nullptr, descr); } + + +tree +gfc_create_unallocated_library_result_descriptor (stmtblock_t *block, tree source_descr, tree dtype) +{ + if (dtype == NULL_TREE) + dtype = gfc_get_dtype (TREE_TYPE (source_descr)); + + gfc_conv_descriptor_dtype_set (block, source_descr, dtype); + + tree res_desc = gfc_evaluate_now (source_descr, block); + gfc_conv_descriptor_data_set (block, res_desc, null_pointer_node); + + return res_desc; +} + + diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h index 81869093b076..780a62d081e9 100644 --- a/gcc/fortran/trans-descriptor.h +++ b/gcc/fortran/trans-descriptor.h @@ -78,6 +78,8 @@ void gfc_nullify_descriptor (stmtblock_t *block, tree); void gfc_init_descriptor_result (stmtblock_t *block, tree descr); void gfc_init_absent_descriptor (stmtblock_t *block, tree descr); void gfc_init_static_descriptor (tree descr); +tree gfc_create_unallocated_library_result_descriptor (stmtblock_t *, tree, + tree); void gfc_init_descriptor_variable (stmtblock_t *block, gfc_symbol *sym, tree descr); diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 89f995843fc6..678f5ddf5c55 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -12201,14 +12201,8 @@ fcncall_realloc_result (gfc_se *se, int rank, tree dtype) desc = build_fold_indirect_ref_loc (input_location, desc); /* Unallocated, the descriptor does not have a dtype. */ - if (dtype != NULL_TREE) - gfc_conv_descriptor_dtype_set (&se->pre, desc, dtype); - else - gfc_conv_descriptor_dtype_set (&se->pre, desc, - gfc_get_dtype (TREE_TYPE (desc))); - - res_desc = gfc_evaluate_now (desc, &se->pre); - gfc_conv_descriptor_data_set (&se->pre, res_desc, null_pointer_node); + res_desc = gfc_create_unallocated_library_result_descriptor (&se->pre, desc, + dtype); se->expr = gfc_build_addr_expr (NULL_TREE, res_desc); /* Free the lhs after the function call and copy the result data to