Hello world, I have just committed the attached patch as obvious after regression-testing.
Since this fixes a regression, I will backport to gcc8 and gcc7 in the next days. Regards Thomas 2018-06-06 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/85641 * frontend-passes.c (is_fe_temp): Add prototype. (realloc_string_callback): Early return for frontend-generated temporary. 2018-06-06 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/85641 * gfortran.dg/realloc_on_assign_30.f90: New test.
Index: frontend-passes.c =================================================================== --- frontend-passes.c (Revision 261245) +++ frontend-passes.c (Arbeitskopie) @@ -57,6 +57,8 @@ static bool has_dimen_vector_ref (gfc_expr *); static int matmul_temp_args (gfc_code **, int *,void *data); static int index_interchange (gfc_code **, int*, void *); +static bool is_fe_temp (gfc_expr *e); + #ifdef CHECKING_P static void check_locus (gfc_namespace *); #endif @@ -254,6 +256,9 @@ realloc_string_callback (gfc_code **c, int *walk_s || !expr1->ts.deferred) return 0; + if (is_fe_temp (expr1)) + return 0; + expr2 = gfc_discard_nops (co->expr2); if (expr2->expr_type == EXPR_VARIABLE)
! { dg-do compile } ! PR 85641 - this used to ICE due do infinite recursion. ! Test case by Antony Lewis. program tester character(LEN=:), allocatable :: fields integer j character(LEN=4), parameter :: CMB_CL_Fields = 'TEBP' fields = '' j=1 fields = fields // CMB_CL_Fields(j:j) end program tester