c2898ec950
PR c++/36237 * cp-gimplify.c (cxx_omp_clause_apply_fn): Call fold_build_cleanup_point_expr on build_call_a results. * g++.dg/gomp/pr36237.C: New test. From-SVN: r135802
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;
|
|
}
|