URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 273 |
Rev 338 |
// PR c++/30703
|
// PR c++/30703
|
// { dg-do run }
|
// { dg-do run }
|
|
|
#include
|
#include
|
|
|
extern "C" void abort ();
|
extern "C" void abort ();
|
|
|
int ctor, cctor, dtor;
|
int ctor, cctor, dtor;
|
|
|
struct A
|
struct A
|
{
|
{
|
A();
|
A();
|
A(const A &);
|
A(const A &);
|
~A();
|
~A();
|
int i;
|
int i;
|
};
|
};
|
|
|
A::A()
|
A::A()
|
{
|
{
|
#pragma omp atomic
|
#pragma omp atomic
|
ctor++;
|
ctor++;
|
}
|
}
|
|
|
A::A(const A &r)
|
A::A(const A &r)
|
{
|
{
|
i = r.i;
|
i = r.i;
|
#pragma omp atomic
|
#pragma omp atomic
|
cctor++;
|
cctor++;
|
}
|
}
|
|
|
A::~A()
|
A::~A()
|
{
|
{
|
#pragma omp atomic
|
#pragma omp atomic
|
dtor++;
|
dtor++;
|
}
|
}
|
|
|
void
|
void
|
foo (A a, A b)
|
foo (A a, A b)
|
{
|
{
|
int i, j = 0;
|
int i, j = 0;
|
#pragma omp parallel for firstprivate (a) lastprivate (a) private (b) schedule (static, 1) num_threads (5)
|
#pragma omp parallel for firstprivate (a) lastprivate (a) private (b) schedule (static, 1) num_threads (5)
|
for (i = 0; i < 5; i++)
|
for (i = 0; i < 5; i++)
|
{
|
{
|
b.i = 5;
|
b.i = 5;
|
if (a.i != 6)
|
if (a.i != 6)
|
#pragma omp atomic
|
#pragma omp atomic
|
j += 1;
|
j += 1;
|
a.i = b.i + i + 6;
|
a.i = b.i + i + 6;
|
}
|
}
|
|
|
if (j || a.i != 15)
|
if (j || a.i != 15)
|
abort ();
|
abort ();
|
}
|
}
|
|
|
void
|
void
|
bar ()
|
bar ()
|
{
|
{
|
A a, b;
|
A a, b;
|
a.i = 6;
|
a.i = 6;
|
b.i = 7;
|
b.i = 7;
|
foo (a, b);
|
foo (a, b);
|
}
|
}
|
|
|
int
|
int
|
main ()
|
main ()
|
{
|
{
|
omp_set_dynamic (false);
|
omp_set_dynamic (false);
|
if (ctor || cctor || dtor)
|
if (ctor || cctor || dtor)
|
abort ();
|
abort ();
|
bar ();
|
bar ();
|
if (ctor + cctor != dtor)
|
if (ctor + cctor != dtor)
|
abort ();
|
abort ();
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.