testsuite/libgomp.c++/pr26943.C

Go to the documentation of this file.
00001 // PR c++/26943
00002 // { dg-do run }
00003 
00004 #include <assert.h>
00005 #include <unistd.h>
00006 
00007 struct S
00008 {
00009   public:
00010     int x;
00011     S () : x(-1) { }
00012     S (const S &);
00013     S& operator= (const S &);
00014     void test ();
00015 };
00016 
00017 static volatile int hold;
00018 
00019 S::S (const S &s)
00020 {
00021   #pragma omp master
00022     sleep (1);
00023 
00024   assert (s.x == -1);
00025   x = 0;
00026 }
00027 
00028 S&
00029 S::operator= (const S& s)
00030 {
00031   assert (s.x == 1);
00032   x = 2;
00033   return *this;
00034 }
00035 
00036 void
00037 S::test ()
00038 {
00039   assert (x == 0);
00040   x = 1;
00041 }
00042 
00043 static S x;
00044 
00045 void
00046 foo ()
00047 {
00048   #pragma omp sections firstprivate(x) lastprivate(x)
00049   {
00050     x.test();
00051   }
00052 }
00053 
00054 int
00055 main ()
00056 {
00057   #pragma omp parallel num_threads(2)
00058     foo();
00059 
00060   assert (x.x == 2);
00061   return 0;
00062 }

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