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