Merge C++ from gomp-20050608-branch.
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / ctor-1.C
blob2ad3b3a6efcc62aaed512be009a9f2f45724c1a0
1 // { dg-do run }
3 #include <omp.h>
4 #include <assert.h>
6 struct B
8   static int icount;
9   static int dcount;
10   static int xcount;
12   B();
13   B(const B &);
14   ~B();
15   B& operator=(const B &);
16   void doit();
19 int B::icount;
20 int B::dcount;
21 int B::xcount;
23 B::B()
25   #pragma omp atomic 
26     icount++;
29 B::~B()
31   #pragma omp atomic
32     dcount++;
35 void B::doit()
37   #pragma omp atomic
38     xcount++;
41 static int nthreads;
43 void foo()
45   B b;
46   #pragma omp parallel private(b)
47     {
48       #pragma omp master
49         nthreads = omp_get_num_threads ();
50       b.doit();
51     }
54 int main()
56   omp_set_dynamic (0);
57   omp_set_num_threads (4);
58   foo();
60   assert (B::xcount == nthreads);
61   assert (B::icount == nthreads+1);
62   assert (B::dcount == nthreads+1);
64   return 0;