URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgomp/] [testsuite/] [libgomp.c++/] [ctor-9.C] - Rev 735
Compare with Previous | Blame | View Log
// { dg-do run }// { dg-require-effective-target tls_runtime }#include <omp.h>#include <assert.h>#define N 10#define THR 4struct B{B& operator=(const B &);};static B *base;static B *threadbase;static int singlethread;#pragma omp threadprivate(threadbase)static unsigned cmask[THR];B& B::operator= (const B &b){unsigned sindex = &b - base;unsigned tindex = this - threadbase;assert(sindex < N);assert(sindex == tindex);cmask[omp_get_thread_num ()] |= 1u << tindex;return *this;}void foo(){#pragma omp parallel{B b[N];threadbase = b;#pragma omp single copyprivate(b){assert(omp_get_num_threads () == THR);singlethread = omp_get_thread_num ();base = b;}}}int main(){omp_set_dynamic (0);omp_set_num_threads (THR);foo();for (int i = 0; i < THR; ++i)if (i == singlethread)assert(cmask[singlethread] == 0);elseassert(cmask[i] == (1u << N) - 1);return 0;}
