| /* { 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; | |
| } |