1! { dg-do run } 2! { dg-additional-options "-O3 -ftree-parallelize-loops=2 -fno-signed-zeros -fno-trapping-math" } 3 4complex function cdcdot(n, cx) 5 implicit none 6 7 integer :: n, i, kx 8 complex :: cx(*) 9 double precision :: dsdotr, dsdoti, dt1, dt3 10 11 kx = 1 12 dsdotr = 0 13 dsdoti = 0 14 do i = 1, n 15 dt1 = real(cx(kx)) 16 dt3 = aimag(cx(kx)) 17 dsdotr = dsdotr + dt1 * 2 - dt3 * 2 18 dsdoti = dsdoti + dt1 * 2 + dt3 * 2 19 kx = kx + 1 20 end do 21 cdcdot = cmplx(real(dsdotr), real(dsdoti)) 22 return 23end function cdcdot 24program test 25 implicit none 26 complex :: cx(100), ct, cdcdot 27 integer :: i 28 do i = 1, 100 29 cx(i) = cmplx(2*i, i) 30 end do 31 ct = cdcdot (100, cx) 32 if (ct.ne.cmplx(10100.0000,30300.0000)) call abort 33end 34