From: Mikael Morin <[email protected]>
Fortran-tested on aarch64-unknown-linux-gnu. OK for mainline?
-- >8 --
The function get_scalar_to_descriptor_type only uses the TREE_TYPE() of its
first argument. Make the function take the type directly as argument,
moving the TREE_TYPE() access to callers.
PR fortran/122521
gcc/fortran/ChangeLog:
* trans-expr.cc (get_scalar_to_descriptor_type): Remove argument
`scalar'; add argument `scalar_type'. Replace `TREE_TYPE (scalar)'
with `scalar_type'.
(gfc_conv_scalar_to_descriptor, gfc_conv_derived_to_class,
gfc_conv_class_to_class): Only pass the type as argument in callers.
---
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 82831b22f77..2d1cac72d7e 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;
@@ -964,7 +963,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));
@@ -1405,7 +1404,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));
--
2.53.0