| /* { dg-do run } */ |
| |
| #include <cassert> |
| |
| void test_ref () |
| { |
| int c_orig = 5; |
| int &c = c_orig; |
| |
| #pragma omp target map(tofrom: c) |
| { |
| c++; |
| } |
| |
| assert (c == 6); |
| } |
| |
| void test_ref_to_ptr () |
| { |
| int val = 5; |
| int *ptr_orig = &val; |
| int *&ptr_ref = ptr_orig; |
| |
| #pragma omp target map(tofrom: ptr_ref[0]) |
| { |
| (*ptr_ref)++; |
| } |
| |
| assert (val == 6); |
| } |
| |
| void test_ref_to_array () |
| { |
| int arr[1]; |
| int (&arr_ref)[1] = arr; |
| |
| arr_ref[0] = 5; |
| |
| #pragma omp target map(tofrom: arr_ref[0:1]) |
| { |
| arr_ref[0]++; |
| } |
| |
| assert (arr_ref[0] == 6); |
| |
| #pragma omp target map(tofrom: arr_ref[0]) |
| { |
| arr_ref[0]++; |
| } |
| |
| assert (arr_ref[0] == 7); |
| } |
| |
| void test_ref_to_ptr_array () |
| { |
| int *arr[1]; |
| int *(&arr_ref)[1] = arr; |
| int val = 5; |
| |
| arr_ref[0] = &val; |
| |
| #pragma omp target data map(alloc: arr_ref, arr_ref[0]) |
| { |
| #pragma omp target map(tofrom: arr_ref[0][0:1]) |
| { |
| arr_ref[0][0]++; |
| } |
| } |
| |
| assert (arr_ref[0][0] == 6); |
| } |
| |
| int main () |
| { |
| test_ref (); |
| test_ref_to_ptr (); |
| test_ref_to_array (); |
| test_ref_to_ptr_array (); |
| return 0; |
| } |