aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-09-21 17:33:29 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-09-21 17:33:29 +0000
commit5b4dd0158308d1a3effffd6316f1b39fdd1ad120 (patch)
tree724835af8e907b547caed382d219d76051a50c9c /gcc/fortran/trans-array.c
parentfd876246ee8a5aabb710673f7a8bc49b7c15fe84 (diff)
downloadgcc-5b4dd0158308d1a3effffd6316f1b39fdd1ad120.zip
gcc-5b4dd0158308d1a3effffd6316f1b39fdd1ad120.tar.gz
gcc-5b4dd0158308d1a3effffd6316f1b39fdd1ad120.tar.bz2
re PR fortran/77325 (ICE in gimplify_var_or_parm_decl, at gimplify.c:1933)
2018-09-21 Paul Thomas <pault@gcc.gnu.org> PR fortran/77325 * trans-array.c (gfc_alloc_allocatable_for_assignment): If the rhs has a charlen expression, convert that and use it. * trans-expr.c (gfc_trans_assignment_1): The rse.pre for the assignment of deferred character array vars to a realocatable lhs should not be added to the exterior block since vector indices, for example, generate temporaries indexed within the loop. 2018-09-21 Paul Thomas <pault@gcc.gnu.org> PR fortran/77325 * gfortran.dg/deferred_character_22.f90 : New test. From-SVN: r264486
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 95ea615..9e00eb0 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -9964,6 +9964,15 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
tmp = concat_str_length (expr2);
expr2->ts.u.cl->backend_decl = gfc_evaluate_now (tmp, &fblock);
}
+ else if (!tmp && expr2->ts.u.cl->length)
+ {
+ gfc_se tmpse;
+ gfc_init_se (&tmpse, NULL);
+ gfc_conv_expr_type (&tmpse, expr2->ts.u.cl->length,
+ gfc_charlen_type_node);
+ tmp = tmpse.expr;
+ expr2->ts.u.cl->backend_decl = gfc_evaluate_now (tmp, &fblock);
+ }
tmp = fold_convert (TREE_TYPE (expr1->ts.u.cl->backend_decl), tmp);
}