1// PR middle-end/66702 2// { dg-options "-O2" } 3// { dg-additional-options "-msse2" { target sse2_runtime } } 4// { dg-additional-options "-mavx" { target avx_runtime } } 5 6struct S { int s1, s2; }; 7struct T { T (); ~T (); int t; }; 8 9T::T () : t(0) {} 10T::~T () {} 11 12#pragma omp declare simd uniform(b, c) notinbranch 13__attribute__((noinline)) int 14foo (int a, S b, T c) 15{ 16 a++; 17 b.s1++; 18 b.s2++; 19 c.t++; 20 return a + b.s1 + b.s2 + c.t; 21} 22 23int 24main () 25{ 26 int r = 0; 27 S s = { 2, 3 }; 28 T t; 29 #pragma omp simd reduction(+:r) 30 for (int i = 0; i < 64; i++) 31 r += foo (i, s, t); 32 if (r != 2592) 33 __builtin_abort (); 34} 35