1// PR c++/36308 2// { dg-do run } 3 4extern "C" void abort (); 5 6static int n; 7 8struct A 9{ 10 A () 11 { 12 l = 0; 13 #pragma omp atomic 14 ctors++; 15 } 16 A (const A &x) 17 { 18 l = x.l; 19 #pragma omp atomic 20 copyctors++; 21 } 22 virtual A& operator= (const A &x) 23 { 24 l = x.l; 25 #pragma omp atomic 26 assignops++; 27 return *this; 28 } 29 virtual ~A () 30 { 31 #pragma omp atomic 32 dtors++; 33 } 34 int l; 35 static int ctors, dtors, copyctors, assignops; 36}; 37 38int A::ctors; 39int A::dtors; 40int A::copyctors; 41int A::assignops; 42 43int 44main () 45{ 46 A a; 47#pragma omp parallel private (a) 48 { 49 a.l = 6; 50 #pragma omp single copyprivate (a) 51 { 52 a.l = 3; 53 } 54 if (a.l != 3) 55 abort (); 56 #pragma omp atomic 57 n++; 58 } 59 if (A::ctors != n + 1 60 || A::copyctors != 0 61 || A::dtors != n 62 || A::assignops != n - 1) 63 abort (); 64 return 0; 65} 66