Hello world, in the fix for PR 47674, there was a piece of unnecessary code which meant that allocatable string assignments did not get their temporary within IF statements (and others).
This patch is really simple and obvious. If we weren't in tstage 4, I would simply commit it. Because allocatable strings are a major convenience for users, I would still like to commit this to trunk and to the affected branches. So, OK for these branches? Regards Thomas 2016-02-18 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/68147 PR fortran/47674 * frontend-passes.c (realloc_string_callbac): Don't set walk_subtrees. 2016-02-18 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/68147 PR fortran/47674 * gfortran.dg/realloc_on_assign_26.f90: New test case.
Index: frontend-passes.c =================================================================== --- frontend-passes.c (Revision 233474) +++ frontend-passes.c (Arbeitskopie) @@ -153,7 +153,7 @@ gfc_run_passes (gfc_namespace *ns) */ static int -realloc_string_callback (gfc_code **c, int *walk_subtrees, +realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, void *data ATTRIBUTE_UNUSED) { gfc_expr *expr1, *expr2; @@ -160,7 +160,6 @@ static int gfc_code *co = *c; gfc_expr *n; - *walk_subtrees = 0; if (co->op != EXEC_ASSIGN) return 0;
! { dg-do run } ! PR 68147 - no temprorary within the IF statement. ! Original test case by Martin Reinecke. program test implicit none character(len=:),allocatable ::name name="./a.out" if (index(name,"/") /= 0) THEN name=name(3:) if (name .ne. "a.out") call abort endif end program