1// PR middle-end/56217
2// { dg-do run }
3// { dg-options "-std=c++0x" }
4
5extern "C" void abort ();
6
7template <typename T>
8struct ptr {
9  T *p;
10  ptr () : p () {}
11  ptr (ptr &) = delete;
12  ptr (ptr &&o) : p(o) {}
13  operator T * () { return p; }
14};
15
16int a[6] = { 100, 101, 102, 103, 104, 105 };
17
18static ptr<int>
19f ()
20{
21  ptr<int> pt;
22  #pragma omp task shared (pt)
23    pt.p = a + 2;
24  #pragma omp taskwait
25  return pt;
26}
27
28int
29main ()
30{
31  ptr<int> pt;
32  #pragma omp parallel
33  #pragma omp single
34  if (f () != a + 2 || *f () != 102)
35    abort ();
36}
37