Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.c++/ctor-11.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | a06113de4d67 |
children |
line wrap: on
line source
// PR c++/36308 // { dg-do run } #include <omp.h> #include <assert.h> #define N 10 struct B { static int icount; static int ccount; static int dcount; static int xcount; B (); B (const B &); virtual ~B (); B& operator= (const B &); void doit (); static void clear () { icount = ccount = dcount = xcount = 0; } }; int B::icount; int B::ccount; int B::dcount; int B::xcount; B::B () { #pragma omp atomic icount++; } B::B (const B &) { #pragma omp atomic ccount++; } B::~B () { #pragma omp atomic dcount++; } void B::doit () { #pragma omp atomic xcount++; } static int nthreads; void test1 () { B b[N]; #pragma omp parallel private (b) { #pragma omp master nthreads = omp_get_num_threads (); b[0].doit (); } } void test2 () { B b; #pragma omp parallel firstprivate (b) { #pragma omp single nthreads = omp_get_num_threads (); b.doit (); } } int main () { omp_set_dynamic (0); omp_set_num_threads (4); B::clear (); test1 (); assert (B::xcount == nthreads); assert (B::ccount == 0); assert (B::icount == (nthreads + 1) * N); assert (B::dcount == (nthreads + 1) * N); B::clear (); test2 (); assert (B::xcount == nthreads); assert (B::ccount == nthreads); assert (B::icount == 1); assert (B::dcount == nthreads + 1); return 0; }