testsuite/libgomp.c++/ctor-12.C

Go to the documentation of this file.
00001 // PR c++/36308
00002 // { dg-do run }
00003 
00004 extern "C" void abort ();
00005 
00006 static int n;
00007 
00008 struct A
00009 {
00010   A ()
00011   {
00012     l = 0;
00013     #pragma omp atomic
00014       ctors++;
00015   }
00016   A (const A &x)
00017   {
00018     l = x.l;
00019     #pragma omp atomic
00020       copyctors++;
00021   }
00022   virtual A& operator= (const A &x)
00023   {
00024     l = x.l;
00025     #pragma omp atomic
00026       assignops++;
00027     return *this;
00028   }
00029   virtual ~A ()
00030   {
00031     #pragma omp atomic
00032       dtors++;
00033   }
00034   int l;
00035   static int ctors, dtors, copyctors, assignops;
00036 };
00037 
00038 int A::ctors;
00039 int A::dtors;
00040 int A::copyctors;
00041 int A::assignops;
00042 
00043 int
00044 main ()
00045 {
00046   A a;
00047 #pragma omp parallel private (a)
00048   {
00049     a.l = 6;
00050     #pragma omp single copyprivate (a)
00051     {
00052       a.l = 3;
00053     }
00054     if (a.l != 3)
00055       abort ();
00056     #pragma omp atomic
00057       n++;
00058   }
00059   if (A::ctors != n + 1
00060       || A::copyctors != 0
00061       || A::dtors != n
00062       || A::assignops != n - 1)
00063     abort ();
00064   return 0;
00065 }

Generated on Fri Apr 5 05:38:10 2013 for Libgomp by  doxygen 1.4.7