On 05/20/2016 04:36 AM, Jakub Jelinek wrote: > Hi! > > We ICE at -O0 while compiling the testcase below, because we don't reset > two vars that are reset in all other places in frontend-passes.c when > starting to process an unrelated statement. Without this, > we can emit some statement into a preexisting block that can be elsewhere > in the current procedure or as in the testcase in completely different > procedure. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/6/5?
Yes, OK, thanks for patch! Jerry > > 2016-05-20 Jakub Jelinek <ja...@redhat.com> > > PR fortran/71204 > * frontend-passes.c (realloc_string_callback): Clear inserted_block > and changed_statement before calling create_var. > > * gfortran.dg/pr71204.f90: New test. > > --- gcc/fortran/frontend-passes.c.jj 2016-05-11 15:16:18.000000000 +0200 > +++ gcc/fortran/frontend-passes.c 2016-05-20 10:44:31.699542384 +0200 > @@ -174,8 +174,10 @@ realloc_string_callback (gfc_code **c, i > > if (!gfc_check_dependency (expr1, expr2, true)) > return 0; > - > + > current_code = c; > + inserted_block = NULL; > + changed_statement = NULL; > n = create_var (expr2, "trim"); > co->expr2 = n; > return 0; > --- gcc/testsuite/gfortran.dg/pr71204.f90.jj 2016-05-20 10:45:40.738608941 > +0200 > +++ gcc/testsuite/gfortran.dg/pr71204.f90 2016-05-20 10:46:25.873998687 > +0200 > @@ -0,0 +1,17 @@ > +! PR fortran/71204 > +! { dg-do compile } > +! { dg-options "-O0" } > + > +module pr71204 > + character(10), allocatable :: z(:) > +end module > + > +subroutine s1 > + use pr71204 > + z(2) = z(1) > +end > + > +subroutine s2 > + use pr71204 > + z(2) = z(1) > +end > > Jakub >