1// { dg-do run } 2 3#include <omp.h> 4#include <assert.h> 5 6struct B 7{ 8 static int icount; 9 static int dcount; 10 static int xcount; 11 12 B(); 13 B(const B &); 14 ~B(); 15 B& operator=(const B &); 16 void doit(); 17}; 18 19int B::icount; 20int B::dcount; 21int B::xcount; 22 23B::B() 24{ 25 #pragma omp atomic 26 icount++; 27} 28 29B::~B() 30{ 31 #pragma omp atomic 32 dcount++; 33} 34 35void B::doit() 36{ 37 #pragma omp atomic 38 xcount++; 39} 40 41static int nthreads; 42 43void foo() 44{ 45 B b; 46 #pragma omp parallel private(b) 47 { 48 #pragma omp master 49 nthreads = omp_get_num_threads (); 50 b.doit(); 51 } 52} 53 54int main() 55{ 56 omp_set_dynamic (0); 57 omp_set_num_threads (4); 58 foo(); 59 60 assert (B::xcount == nthreads); 61 assert (B::icount == nthreads+1); 62 assert (B::dcount == nthreads+1); 63 64 return 0; 65} 66