https://gcc.gnu.org/g:c51caca35575fec72eb235e8bdb04926858f510c
commit c51caca35575fec72eb235e8bdb04926858f510c Author: Mikael Morin <[email protected]> Date: Tue Oct 7 21:59:54 2025 +0200 Correction régression unlimited_polymorphic_19.f90 Diff: --- gcc/fortran/trans-expr.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 2e3c9c2e6c55..a9d2a603a762 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -1268,7 +1268,19 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, gfc_typespec class_ts, tree src = parmse->expr; if (GFC_CLASS_TYPE_P (TREE_TYPE (src))) src = gfc_class_data_get (src); - gfc_copy_descriptor (&block, ctree, src); + if (e->rank == 0) + { + if (TYPE_MAIN_VARIANT (TREE_TYPE (ctree)) + != TYPE_MAIN_VARIANT (TREE_TYPE (src)) + && TREE_CODE (TREE_TYPE (ctree)) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (src)) == POINTER_TYPE + && (TREE_CODE (TREE_TYPE (TREE_TYPE (ctree))) == VOID_TYPE + || TREE_CODE (TREE_TYPE (TREE_TYPE (src))) == VOID_TYPE)) + src = fold_convert_loc (input_location, TREE_TYPE (ctree), src); + gfc_add_modify (&block, ctree, src); + } + else + gfc_copy_descriptor (&block, ctree, src); } /* Return the data component, except in the case of scalarized array
