https://gcc.gnu.org/g:1d16782a766400637ae571206799ae451b7a4496
commit 1d16782a766400637ae571206799ae451b7a4496 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Sat May 31 18:01:10 2025 +0200 Correction régression bind-c-contiguous-1 Diff: --- gcc/fortran/trans-decl.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index aae0c26ab8fd..8cefe50699ff 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -7826,6 +7826,7 @@ gfc_generate_function_code (gfc_namespace * ns) fsym->backend_decl = NULL; tree type = gfc_sym_type (fsym); gcc_assert (POINTER_TYPE_P (type)); + tree desc_type = TREE_TYPE (type); if (POINTER_TYPE_P (TREE_TYPE (type))) /* For instance, allocatable scalars. */ type = TREE_TYPE (type); @@ -7857,6 +7858,31 @@ gfc_generate_function_code (gfc_namespace * ns) } fsym->backend_decl = desc_p; gfc_conv_cfi_to_gfc (&init, &cleanup, tmp, desc, fsym); + if (GFC_DESCRIPTOR_TYPE_P (desc_type) + && TYPE_LANG_SPECIFIC (desc_type)) + { + if (GFC_TYPE_ARRAY_ELEM_LEN (desc_type) + && TREE_CODE (GFC_TYPE_ARRAY_ELEM_LEN (desc_type)) == SAVE_EXPR) + GFC_TYPE_ARRAY_ELEM_LEN (desc_type) = + gfc_evaluate_now (GFC_TYPE_ARRAY_ELEM_LEN (desc_type), + &init); + + if (GFC_TYPE_ARRAY_OFFSET (desc_type) + && TREE_CODE (GFC_TYPE_ARRAY_OFFSET (desc_type)) == SAVE_EXPR) + GFC_TYPE_ARRAY_OFFSET (desc_type) + = gfc_evaluate_now (GFC_TYPE_ARRAY_OFFSET (desc_type), + &init); + + + if (GFC_TYPE_ARRAY_RANK (desc_type) > 0) + for (int i = 0; i < GFC_TYPE_ARRAY_RANK (desc_type); i++) + if (GFC_TYPE_ARRAY_SPACING (desc_type, i) + && TREE_CODE (GFC_TYPE_ARRAY_SPACING (desc_type, i)) + == SAVE_EXPR) + GFC_TYPE_ARRAY_SPACING (desc_type, i) + = gfc_evaluate_now (GFC_TYPE_ARRAY_SPACING (desc_type, i), + &init); + } } /* For OpenMP, ensure that declare variant in INTERFACE is is processed