diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2018-09-21 17:33:29 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2018-09-21 17:33:29 +0000 |
commit | 5b4dd0158308d1a3effffd6316f1b39fdd1ad120 (patch) | |
tree | 724835af8e907b547caed382d219d76051a50c9c /gcc/fortran/trans-array.c | |
parent | fd876246ee8a5aabb710673f7a8bc49b7c15fe84 (diff) | |
download | gcc-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.c | 9 |
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); } |