https://gcc.gnu.org/g:bba416ccb2f949538394815a5b2e4bc9b016c303
commit bba416ccb2f949538394815a5b2e4bc9b016c303 Author: Mikael Morin <[email protected]> Date: Thu Aug 6 11:17:12 2026 +0200 Refactoring gfc_get_scalar_to_descriptor_type Correction gfc_get_scalar_to_descriptor_type Correction gfc_get_scalar_to_descriptor_type Diff: --- gcc/fortran/trans-expr.cc | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 5e13d5950959..04d711ef4d02 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -88,7 +88,7 @@ gfc_get_character_len_in_bytes (tree type) arrays. */ static tree -get_scalar_to_descriptor_type (tree scalar, symbol_attribute attr) +get_scalar_to_descriptor_type (tree scalar_type, symbol_attribute attr) { enum gfc_array_kind akind; tree *lbound = NULL, *ubound = NULL; @@ -101,18 +101,17 @@ get_scalar_to_descriptor_type (tree scalar, symbol_attribute attr) else akind = GFC_ARRAY_ASSUMED_SHAPE_CONT; - if (POINTER_TYPE_P (TREE_TYPE (scalar))) - scalar = TREE_TYPE (scalar); - if (TYPE_LANG_SPECIFIC (TREE_TYPE (scalar))) + if (POINTER_TYPE_P (scalar_type)) + scalar_type = TREE_TYPE (scalar_type); + if (TYPE_LANG_SPECIFIC (scalar_type)) { - struct lang_type *lang_specific = TYPE_LANG_SPECIFIC (TREE_TYPE (scalar)); + struct lang_type *lang_specific = TYPE_LANG_SPECIFIC (scalar_type); codim = lang_specific->corank; lbound = lang_specific->lbound; ubound = lang_specific->ubound; } - return gfc_get_array_type_bounds (TREE_TYPE (scalar), 0, codim, lbound, - ubound, 1, akind, - !(attr.pointer || attr.target)); + return gfc_get_array_type_bounds (scalar_type, 0, codim, lbound, ubound, 1, + akind, !(attr.pointer || attr.target)); } tree @@ -120,7 +119,7 @@ gfc_conv_scalar_to_descriptor (gfc_se *se, tree scalar, symbol_attribute attr) { tree desc, type, etype; - type = get_scalar_to_descriptor_type (scalar, attr); + type = get_scalar_to_descriptor_type (TREE_TYPE (scalar), attr); etype = TREE_TYPE (scalar); desc = gfc_create_var (type, "desc"); DECL_ARTIFICIAL (desc) = 1; @@ -962,7 +961,7 @@ gfc_conv_derived_to_class (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym, if (fsym->ts.u.derived->components->as) { tree type; - type = get_scalar_to_descriptor_type (parmse->expr, + type = get_scalar_to_descriptor_type (TREE_TYPE (parmse->expr), gfc_expr_attr (e)); gfc_conv_descriptor_dtype_set (&parmse->pre, ctree, gfc_get_dtype (type)); @@ -1403,7 +1402,7 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, gfc_typespec class_ts, { if (e->rank == 0) { - tree type = get_scalar_to_descriptor_type (parmse->expr, + tree type = get_scalar_to_descriptor_type (TREE_TYPE (parmse->expr), gfc_expr_attr (e)); gfc_conv_descriptor_dtype_set (&block, ctree, gfc_get_dtype (type));
