// PR middle-end/66702 // { dg-do run { target vect_simd_clones } } // { dg-options "-O2" } // { dg-additional-options "-msse2" { target sse2_runtime } } // { dg-additional-options "-mavx" { target avx_runtime } } struct S { int s1, s2; }; struct T { T (); ~T (); int t; }; T::T () : t(0) {} T::~T () {} #pragma omp declare simd uniform(b, c) notinbranch __attribute__((noinline)) int foo (int a, S b, T c) { a++; b.s1++; b.s2++; c.t++; return a + b.s1 + b.s2 + c.t; } int main () { int r = 0; S s = { 2, 3 }; T t; #pragma omp simd reduction(+:r) for (int i = 0; i < 64; i++) r += foo (i, s, t); if (r != 2592) __builtin_abort (); }