Hello world,
I just committed the attached patch as obvious and simple to trunk,
r255294.
Regards
Thomas
2017-12-01 Thomas Koenig <[email protected]>
PR fortran/83224
* frontend-passes.c (realloc_string_callback): Handle
case for which the RHS is an array expression.
2017-12-01 Thomas Koenig <[email protected]>
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