| /* { dg-do run } */ |
| |
| #include <cassert> |
| |
| #define N 1024 |
| |
| class M { |
| int array[N]; |
| |
| public: |
| M () |
| { |
| for (int i = 0; i < N; i++) |
| array[i] = 0; |
| } |
| |
| void incr_with_this (int c) |
| { |
| #pragma omp target map(this->array[:N]) |
| for (int i = 0; i < N; i++) |
| array[i] += c; |
| } |
| |
| void incr_without_this (int c) |
| { |
| #pragma omp target map(array[:N]) |
| for (int i = 0; i < N; i++) |
| array[i] += c; |
| } |
| |
| void incr_implicit (int c) |
| { |
| #pragma omp target |
| for (int i = 0; i < N; i++) |
| array[i] += c; |
| } |
| |
| void check (int c) |
| { |
| for (int i = 0; i < N; i++) |
| assert (array[i] == c); |
| } |
| }; |
| |
| int |
| main (int argc, char *argv[]) |
| { |
| M m; |
| |
| m.check (0); |
| m.incr_with_this (3); |
| m.check (3); |
| m.incr_without_this (5); |
| m.check (8); |
| m.incr_implicit (2); |
| m.check (10); |
| |
| return 0; |
| } |