Hello world, I just committed the attached patch as obvious and simple to trunk, r255294.
Regards Thomas 2017-12-01 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/83224 * frontend-passes.c (realloc_string_callback): Handle case for which the RHS is an array expression. 2017-12-01 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/83224 * gfortran.dg/dependency_50.f90: New test.
Index: frontend-passes.c =================================================================== --- frontend-passes.c (Revision 255181) +++ frontend-passes.c (Arbeitskopie) @@ -249,7 +249,7 @@ realloc_string_callback (gfc_code **c, int *walk_s return 0; expr1 = co->expr1; - if (expr1->ts.type != BT_CHARACTER || expr1->rank != 0 + if (expr1->ts.type != BT_CHARACTER || !gfc_expr_attr(expr1).allocatable || !expr1->ts.deferred) return 0; @@ -270,8 +270,9 @@ realloc_string_callback (gfc_code **c, int *walk_s if (!found_substr) return 0; } - else if (expr2->expr_type != EXPR_OP - || expr2->value.op.op != INTRINSIC_CONCAT) + else if (expr2->expr_type != EXPR_ARRAY + && (expr2->expr_type != EXPR_OP + || expr2->value.op.op != INTRINSIC_CONCAT)) return 0; if (!gfc_check_dependency (expr1, expr2, true))
! { dg-do run } ! PR 83224 - dependency mishandling with an array constructor ! Original test case by Urban Jost program dusty_corner implicit none character(len=:),allocatable :: words(:) words=[character(len=3) :: 'one', 'two'] words=[character(len=5) :: words, 'three'] if (any(words /= [ "one ", "two ", "three"])) call abort end program dusty_corner