diff mbox

Fix PR79315

Message ID alpine.LSU.2.20.1702011136370.12993@r111.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Feb. 1, 2017, 10:38 a.m. UTC
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  <rguenther@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.
diff mbox

Patch

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