aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c++/reference-1.C
blob: f2a78614a138c3c98a8961f6f2c2845f1b144a87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// { dg-do run }

#include <omp.h>

__attribute__((noinline, noclone)) void
foo (int &a, short &d, char &g)
{
  unsigned long b = 12;
  unsigned long &c = b;
  long long e = 21;
  long long &f = e;
  unsigned int h = 12;
  unsigned int &k = h;
  #pragma omp parallel default(none) private(a, c) firstprivate(d, f) shared(g, k)
    {
      int i = omp_get_thread_num ();
      a = i;
      c = 2 * i;
      if (d != 27 || f != 21)
	__builtin_abort ();
      d = 3 * (i & 0xfff);
      f = 4 * i;
      #pragma omp barrier
      if (a != i || c != 2 * i || d != 3 * (i & 0xfff) || f != 4 * i)
	__builtin_abort ();
      #pragma omp for lastprivate(g, k)
      for (int j = 0; j < 32; j++)
	{
	  g = j;
	  k = 3 * j;
	}
    }
  if (g != 31 || k != 31 * 3)
    __builtin_abort ();
  #pragma omp parallel for firstprivate (g, k) lastprivate (g, k)
  for (int j = 0; j < 32; j++)
    {
      if (g != 31 || k != 31 * 3)
	__builtin_abort ();
      if (j == 31)
	{
	  g = 29;
	  k = 138;
	}
    }
  if (g != 29 || k != 138)
    __builtin_abort ();
}

int
main ()
{
  int a = 5;
  short d = 27;
  char g = ' ';
  foo (a, d, g);
}