]> gcc.gnu.org Git - gcc.git/blame - libgomp/testsuite/libgomp.c++/firstprivate-2.C
OpenMP/C++: Fix (first)private clause with member variables [PR110347]
[gcc.git] / libgomp / testsuite / libgomp.c++ / firstprivate-2.C
CommitLineData
4f82d5a9
JJ
1/* PR c++/110347 */
2
3#include <omp.h>
4
5struct t {
6 int A;
7 void f (int dev);
8};
9
10void
11t::f (int dev)
12{
13 int B = 49;
14
15 A = 7;
16 #pragma omp parallel firstprivate(A) if(0) shared(B) default(none)
17 {
18 if (A != 7) { __builtin_printf("ERROR 1b: %d (!= 7) inside omp parallel\n", A); __builtin_abort (); }
19 A = 5;
20 B = A;
21 }
22 if (A != 7) { __builtin_printf("ERROR 1: %d (!= 7) omp parallel\n", A); __builtin_abort (); }
23 if (B != 5) { __builtin_printf("ERROR 1a: %d\n", B); __builtin_abort (); }
24 A = 8; B = 49;
25 #pragma omp parallel firstprivate(A)if(0) shared(B) default(none)
26 {
27 if (A != 8) { __builtin_printf("ERROR 1b: %d (!= 8) inside omp parallel\n", A); __builtin_abort (); }
28 A = 6;
29 B = A;
30 }
31 if (A != 8) { __builtin_printf("ERROR 2: %d (!= 8) omp parallel\n", A); __builtin_abort (); }
32 if (B != 6) { __builtin_printf("ERROR 2a: %d\n", B); __builtin_abort (); }
33 A = 8; B = 49;
34
35 #pragma omp target firstprivate(A) map(from:B) device(dev)
36 {
37 if (A != 8) { __builtin_printf("ERROR 2b: %d (!= 8) inside omp target\n", A); __builtin_abort (); }
38 A = 7;
39 B = A;
40 }
41 if (A != 8) { __builtin_printf("ERROR 3: %d (!= 8) omp target\n", A); __builtin_abort (); }
42 if (B != 7) { __builtin_printf("ERROR 3a: %d\n", B); __builtin_abort (); }
43 A = 9; B = 49;
44 #pragma omp target firstprivate(A) map(from:B) device(dev)
45 {
46 if (A != 9) { __builtin_printf("ERROR 3b: %d (!= 9) inside omp target\n", A); __builtin_abort (); }
47 A = 8;
48 B = A;
49 }
50 if (A != 9) { __builtin_printf("ERROR 4: %d (!= 9) omp target\n", A); __builtin_abort (); }
51 if (B != 8) { __builtin_printf("ERROR 4a: %d\n", B); __builtin_abort (); }
52}
53
54
55template <typename T>
56struct tt {
57 T C;
58 void g (int dev);
59};
60
61template <typename T>
62void
63tt<T>::g (int dev)
64{
65 T D = 49;
66 C = 7;
67 #pragma omp parallel firstprivate(C) if(0) shared(D) default(none)
68 {
69 if (C != 7) { __builtin_printf("ERROR 1b: %d (!= 7) inside omp parallel\n", C);__builtin_abort (); }
70 C = 5;
71 D = C;
72 }
73 if (C != 7) { __builtin_printf("ERROR 1: %d (!= 7) omp parallel\n", C);__builtin_abort (); }
74 if (D != 5) { __builtin_printf("ERROR 1a: %d\n", D);__builtin_abort (); }
75 C = 8; D = 49;
76 #pragma omp parallel firstprivate(C)if(0) shared(D) default(none)
77 {
78 if (C != 8) { __builtin_printf("ERROR 1b: %d (!= 8) inside omp parallel\n", C);__builtin_abort (); }
79 C = 6;
80 D = C;
81 }
82 if (C != 8) { __builtin_printf("ERROR 2: %d (!= 8) omp parallel\n", C);__builtin_abort (); }
83 if (D != 6) { __builtin_printf("ERROR 2a: %d\n", D);__builtin_abort (); }
84 C = 8; D = 49;
85 #pragma omp target firstprivate(C) map(from:D) defaultmap(none) device(dev)
86 {
87 if (C != 8) { __builtin_printf("ERROR 2b: %d (!= 8) inside omp target\n", C);__builtin_abort (); }
88 C = 7;
89 D = C;
90 }
91 if (C != 8) { __builtin_printf("ERROR 3: %d (!= 8) omp target\n", C);__builtin_abort (); }
92 if (D != 7) { __builtin_printf("ERROR 3a: %d\n", D);__builtin_abort (); }
93 C = 9; D = 49;
94 #pragma omp target firstprivate(C) map(from:D) defaultmap(none) device(dev)
95 {
96 if (C != 9) { __builtin_printf("ERROR 3b: %d (!= 9) inside omp target\n", C);__builtin_abort (); }
97 C = 8;
98 D = C;
99 }
100 if (C != 9) { __builtin_printf("ERROR 4: %d (!= 9) omp target\n", C); __builtin_abort (); }
101 if (D != 8) { __builtin_printf("ERROR 4a: %d\n", D); }
102}
103
104void
105foo ()
106{
107 struct t x;
108 for (int dev = 0; dev <= omp_get_num_devices (); dev++)
109 x.f (dev);
110}
111
112void
113bar ()
114{
115 struct tt<int> y;
116 for (int dev = 0; dev <= omp_get_num_devices (); dev++)
117 y.g (dev);
118}
119
120int
121main ()
122{
123 foo ();
124 bar ();
125}
This page took 0.043376 seconds and 5 git commands to generate.