// PR middle-end/56217 | |
// { dg-do run } | |
// { dg-options "-std=c++0x" } | |
extern "C" void abort (); | |
template <typename T> | |
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<int> | |
f () | |
{ | |
ptr<int> pt; | |
#pragma omp task shared (pt) | |
pt.p = a + 2; | |
#pragma omp taskwait | |
return pt; | |
} | |
int | |
main () | |
{ | |
ptr<int> pt; | |
#pragma omp parallel | |
#pragma omp single | |
if (f () != a + 2 || *f () != 102) | |
abort (); | |
} |