33 lines
443 B
C
33 lines
443 B
C
/* { dg-do run } */
|
|||
|
|||
extern void abort ();
|
|||
|
|||
struct S;
|
|||
void foo (struct S *, struct S *);
|
|||
#pragma omp declare reduction (+:struct S:foo (&omp_out, &omp_in))
|
|||
struct S { int s; };
|
|||
|
|||
void
|
|||
foo (struct S *x, struct S *y)
|
|||
{
|
|||
x->s += y->s;
|
|||
}
|
|||
|
|||
int
|
|||
main ()
|
|||
{
|
|||
struct S s;
|
|||
int i = 0;
|
|||
s.s = 0;
|
|||
#pragma omp parallel reduction (+:s, i)
|
|||
{
|
|||
if (s.s != 0)
|
|||
abort ();
|
|||
s.s = 2;
|
|||
i = 1;
|
|||
}
|
|||
if (s.s != 2 * i)
|
|||
abort ();
|
|||
return 0;
|
|||
}
|