// PR middle-end/56217 // { dg-do run } // { dg-options "-std=c++0x" } extern "C" void abort (); template struct ptr { T *p; ptr () : p () {} ptr (ptr &) = delete; ptr (ptr &&o) : p(o) {} operator T * () { return p; } }; int a[6] = { 100, 101, 102, 103, 104, 105 }; static ptr f () { ptr pt; #pragma omp task shared (pt) pt.p = a + 2; #pragma omp taskwait return pt; } int main () { ptr pt; #pragma omp parallel #pragma omp single if (f () != a + 2 || *f () != 102) abort (); }