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