The following fixes ICEs when building SPEC 2k6 with autopar. Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
Richard. 2017-02-01 Richard Biener <rguent...@suse.de> PR middle-end/79315 * tree-cfg.c (move_stmt_op): Never set TREE_BLOCK when it was not set before. * gfortran.dg/pr79315.f90: New testcase. Index: gcc/tree-cfg.c =================================================================== --- gcc/tree-cfg.c (revision 245064) +++ gcc/tree-cfg.c (working copy) @@ -6636,11 +6636,12 @@ move_stmt_op (tree *tp, int *walk_subtre if (EXPR_P (t)) { tree block = TREE_BLOCK (t); - if (block == p->orig_block - || (p->orig_block == NULL_TREE - && block != NULL_TREE)) + if (block == NULL_TREE) + ; + else if (block == p->orig_block + || p->orig_block == NULL_TREE) TREE_SET_BLOCK (t, p->new_block); - else if (flag_checking && block != NULL_TREE) + else if (flag_checking) { while (block && TREE_CODE (block) == BLOCK && block != p->orig_block) block = BLOCK_SUPERCONTEXT (block); Index: gcc/testsuite/gfortran.dg/pr79315.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr79315.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr79315.f90 (working copy) @@ -0,0 +1,52 @@ +! { dg-do compile } +! { dg-require-effective-target pthread } +! { dg-options "-Ofast -ftree-parallelize-loops=4" } + +SUBROUTINE wsm32D(t, & + w, & + den, & + p, & + delz, & + its,& + ite, & + kts, & + kte & + ) + REAL, DIMENSION( its:ite , kts:kte ), & + INTENT(INOUT) :: & + t + REAL, DIMENSION( ims:ime , kms:kme ), & + INTENT(IN ) :: w, & + den, & + p, & + delz + REAL, DIMENSION( its:ite , kts:kte ) :: & + qs, & + xl, & + work1, & + work2, & + qs0, & + n0sfac + diffus(x,y) = 8.794e-5*x**1.81/y + diffac(a,b,c,d,e) = d*a*a/(xka(c,d)*rv*c*c)+1./(e*diffus(c,b)) + venfac(a,b,c) = (viscos(b,c)/diffus(b,a))**(.3333333) & + /viscos(b,c)**(.5)*(den0/c)**0.25 + do loop = 1,loops + xa=-dldt/rv + do k = kts, kte + do i = its, ite + tr=ttp/t(i,k) + if(t(i,k).lt.ttp) then + qs(i,k) =psat*(tr**xa)*exp(xb*(1.-tr)) + endif + qs0(i,k) =psat*(tr**xa)*exp(xb*(1.-tr)) + enddo + do i = its, ite + if(t(i,k).ge.t0c) then + work1(i,k) = diffac(xl(i,k),p(i,k),t(i,k),den(i,k),qs(i,k)) + endif + work2(i,k) = venfac(p(i,k),t(i,k),den(i,k)) + enddo + enddo + enddo ! big loops +END SUBROUTINE wsm32D