diff mbox

Fix PR80494

Message ID alpine.LSU.2.20.1704241024580.24645@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener April 24, 2017, 8:25 a.m. UTC
The following patch fixes this PR.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

Richard.

2017-04-24  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/80494
	* tree-scalar-evolution.c (analyze_scalar_evolution_1): Bail
	out for complex types.

	* gfortran.dg/pr80494.f90: New testcase.
diff mbox

Patch

Index: gcc/tree-scalar-evolution.c
===================================================================
--- gcc/tree-scalar-evolution.c	(revision 247091)
+++ gcc/tree-scalar-evolution.c	(working copy)
@@ -2049,7 +2049,9 @@  analyze_scalar_evolution_1 (struct loop
   basic_block bb;
   struct loop *def_loop;
 
-  if (loop == NULL || TREE_CODE (type) == VECTOR_TYPE)
+  if (loop == NULL
+      || TREE_CODE (type) == VECTOR_TYPE
+      || TREE_CODE (type) == COMPLEX_TYPE)
     return chrec_dont_know;
 
   if (TREE_CODE (var) != SSA_NAME)
Index: gcc/testsuite/gfortran.dg/pr80494.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr80494.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr80494.f90	(working copy)
@@ -0,0 +1,32 @@ 
+! { dg-do compile }
+! { dg-options "-std=gnu -O2" }
+
+subroutine CalcCgr(C,rmax,ordgr_max)
+  integer, intent(in) :: rmax,ordgr_max
+  double complex :: Zadj(2,2), Zadj2(2,2)
+  double complex, intent(out) :: C(0:rmax,0:rmax,0:rmax)
+  double complex, allocatable :: Cexpgr(:,:,:,:)
+  double complex :: Caux
+  integer :: rmaxB,rmaxExp,r,n0,n1,n2,k,l,i,j,m,n,nn
+
+  rmaxB = 2*rmax
+  rmaxExp = rmaxB
+  allocate(Cexpgr(0:rmaxExp/2,0:rmaxExp,0:rmaxExp,0:ordgr_max))
+   
+  rloop: do r=0,rmaxExp/2
+    do n0=r,1,-1
+      do nn=r-n0,0,-1
+        do i=1,2
+          Caux = Caux - Zadj(i,l)
+        end do
+        Cexpgr(n0,0,0,0) = Caux/(2*(nn+1))
+      end do
+    end do
+    do n1=0,r
+      n2 = r-n1
+      if (r.le.rmax) then
+        C(0,n1,n2) = Cexpgr(0,n1,n2,0)
+      end if
+    end do
+  end do rloop
+end subroutine CalcCgr