46 lines
651 B
C
46 lines
651 B
C
|
/* { dg-do run } */
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <omp.h>
|
||
|
extern void abort (void);
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
int bad, x;
|
||
|
x = 2;
|
||
|
bad = 0;
|
||
|
#pragma omp parallel num_threads(2) shared(x, bad)
|
||
|
{
|
||
|
if (omp_get_thread_num () == 0)
|
||
|
{
|
||
|
volatile int i;
|
||
|
for (i = 0; i < 100000000; i++)
|
||
|
x = 5;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* Print 1: the following read of x has a race */
|
||
|
if (x != 2 && x != 5)
|
||
|
bad = 1;
|
||
|
}
|
||
|
#pragma omp barrier
|
||
|
if (omp_get_thread_num () == 0)
|
||
|
{
|
||
|
/* x must be 5 now. */
|
||
|
if (x != 5)
|
||
|
bad = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* x must be 5 now. */
|
||
|
if (x != 5)
|
||
|
bad = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (bad)
|
||
|
abort ();
|
||
|
|
||
|
return 0;
|
||
|
}
|