URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 273 |
Rev 338 |
// PR c++/36308
|
// PR c++/36308
|
// { dg-do run }
|
// { dg-do run }
|
|
|
extern "C" void abort ();
|
extern "C" void abort ();
|
|
|
static int n;
|
static int n;
|
|
|
struct A
|
struct A
|
{
|
{
|
A ()
|
A ()
|
{
|
{
|
l = 0;
|
l = 0;
|
#pragma omp atomic
|
#pragma omp atomic
|
ctors++;
|
ctors++;
|
}
|
}
|
A (const A &x)
|
A (const A &x)
|
{
|
{
|
l = x.l;
|
l = x.l;
|
#pragma omp atomic
|
#pragma omp atomic
|
copyctors++;
|
copyctors++;
|
}
|
}
|
virtual A& operator= (const A &x)
|
virtual A& operator= (const A &x)
|
{
|
{
|
l = x.l;
|
l = x.l;
|
#pragma omp atomic
|
#pragma omp atomic
|
assignops++;
|
assignops++;
|
return *this;
|
return *this;
|
}
|
}
|
virtual ~A ()
|
virtual ~A ()
|
{
|
{
|
#pragma omp atomic
|
#pragma omp atomic
|
dtors++;
|
dtors++;
|
}
|
}
|
int l;
|
int l;
|
static int ctors, dtors, copyctors, assignops;
|
static int ctors, dtors, copyctors, assignops;
|
};
|
};
|
|
|
int A::ctors;
|
int A::ctors;
|
int A::dtors;
|
int A::dtors;
|
int A::copyctors;
|
int A::copyctors;
|
int A::assignops;
|
int A::assignops;
|
|
|
int
|
int
|
main ()
|
main ()
|
{
|
{
|
A a;
|
A a;
|
#pragma omp parallel private (a)
|
#pragma omp parallel private (a)
|
{
|
{
|
a.l = 6;
|
a.l = 6;
|
#pragma omp single copyprivate (a)
|
#pragma omp single copyprivate (a)
|
{
|
{
|
a.l = 3;
|
a.l = 3;
|
}
|
}
|
if (a.l != 3)
|
if (a.l != 3)
|
abort ();
|
abort ();
|
#pragma omp atomic
|
#pragma omp atomic
|
n++;
|
n++;
|
}
|
}
|
if (A::ctors != n + 1
|
if (A::ctors != n + 1
|
|| A::copyctors != 0
|
|| A::copyctors != 0
|
|| A::dtors != n
|
|| A::dtors != n
|
|| A::assignops != n - 1)
|
|| A::assignops != n - 1)
|
abort ();
|
abort ();
|
return 0;
|
return 0;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.