diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 1d24e182cf97..0226f365ef34 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -8350,14 +8350,13 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr) } } - if (expr->ts.type == BT_CHARACTER - && VAR_P (TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (parm))))) - { - tree elem_len = TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (parm))); - gfc_add_modify (&loop.pre, elem_len, - fold_convert (TREE_TYPE (elem_len), - gfc_get_array_span (desc, expr))); - } + if (expr->ts.type == BT_CHARACTER) + if (tree elt_type = gfc_get_element_type (TREE_TYPE (parm))) + if (tree elem_len = TYPE_SIZE_UNIT (elt_type)) + if (VAR_P (elem_len)) + gfc_add_modify (&loop.pre, elem_len, + fold_convert (TREE_TYPE (elem_len), + gfc_get_array_span (desc, expr))); if (info && info->ref diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc index 9e8f2701b24f..719045002455 100644 --- a/gcc/fortran/trans-types.cc +++ b/gcc/fortran/trans-types.cc @@ -1401,7 +1401,8 @@ gfc_typenode_for_spec (gfc_typespec * spec, int codim) break; case BT_CHARACTER: - basetype = gfc_get_character_type (spec->kind, spec->u.cl); + basetype = gfc_get_character_type (spec->kind, + spec->deferred ? nullptr : spec->u.cl); break; case BT_HOLLERITH: