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 <[email protected]>
PR fortran/68147
PR fortran/47674
* frontend-passes.c (realloc_string_callbac): Don't set
walk_subtrees.
2016-02-18 Thomas Koenig <[email protected]>
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