diff options
Diffstat (limited to 'libgomp/testsuite/libgomp.c++/udr-8.C')
-rw-r--r-- | libgomp/testsuite/libgomp.c++/udr-8.C | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c++/udr-8.C b/libgomp/testsuite/libgomp.c++/udr-8.C new file mode 100644 index 00000000000..81c4beb8b6e --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/udr-8.C @@ -0,0 +1,39 @@ +// { dg-do run } + +extern "C" void abort (); + +struct S; +void foo (S *, S *); +void bar (S &, S &); +#pragma omp declare reduction (+:S:foo (&omp_out, &omp_in)) +#pragma omp declare reduction (*:S:bar (omp_out, omp_in)) +struct S { int s; S () : s (0) {} }; + +void +foo (S *x, S *y) +{ + x->s += y->s; +} + +void +bar (S &x, S &y) +{ + x.s += y.s; +} + +int +main () +{ + S s, t; + int i = 0; + #pragma omp parallel reduction (+:s, i) reduction (*:t) + { + if (s.s != 0 || t.s != 0) + abort (); + s.s = 2; + t.s = 3; + i = 1; + } + if (s.s != 2 * i || t.s != 3 * i) + abort (); +} |