1  /* { dg-do compile } */
       2  /* { dg-options "-fopenmp" } */
       3  
       4  struct S {};
       5  void foo (void *, void *);
       6  void bar (void *, void *);
       7  void baz (void *);
       8  #pragma omp declare reduction(+:struct S:foo (&omp_out, &omp_in))initializer(bar(&omp_priv, &omp_orig))
       9  
      10  void
      11  test (void)
      12  {
      13    struct S a, b[10];
      14    #pragma omp parallel reduction(+:a)
      15      baz (&a);
      16  }