mirror of
https://github.com/autc04/Retro68.git
synced 2024-08-19 03:29:10 +00:00
66 lines
880 B
C++
66 lines
880 B
C++
|
// PR c++/36308
|
||
|
// { dg-do run }
|
||
|
|
||
|
extern "C" void abort ();
|
||
|
|
||
|
static int n;
|
||
|
|
||
|
struct A
|
||
|
{
|
||
|
A ()
|
||
|
{
|
||
|
l = 0;
|
||
|
#pragma omp atomic
|
||
|
ctors++;
|
||
|
}
|
||
|
A (const A &x)
|
||
|
{
|
||
|
l = x.l;
|
||
|
#pragma omp atomic
|
||
|
copyctors++;
|
||
|
}
|
||
|
virtual A& operator= (const A &x)
|
||
|
{
|
||
|
l = x.l;
|
||
|
#pragma omp atomic
|
||
|
assignops++;
|
||
|
return *this;
|
||
|
}
|
||
|
virtual ~A ()
|
||
|
{
|
||
|
#pragma omp atomic
|
||
|
dtors++;
|
||
|
}
|
||
|
int l;
|
||
|
static int ctors, dtors, copyctors, assignops;
|
||
|
};
|
||
|
|
||
|
int A::ctors;
|
||
|
int A::dtors;
|
||
|
int A::copyctors;
|
||
|
int A::assignops;
|
||
|
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
A a;
|
||
|
#pragma omp parallel private (a)
|
||
|
{
|
||
|
a.l = 6;
|
||
|
#pragma omp single copyprivate (a)
|
||
|
{
|
||
|
a.l = 3;
|
||
|
}
|
||
|
if (a.l != 3)
|
||
|
abort ();
|
||
|
#pragma omp atomic
|
||
|
n++;
|
||
|
}
|
||
|
if (A::ctors != n + 1
|
||
|
|| A::copyctors != 0
|
||
|
|| A::dtors != n
|
||
|
|| A::assignops != n - 1)
|
||
|
abort ();
|
||
|
return 0;
|
||
|
}
|