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