1 // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2 // RUN: %clang_cc1 -fopenmp -emit-pch -o %t %s
3 // RUN: %clang_cc1 -fopenmp -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4 
5 // RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s
6 // RUN: %clang_cc1 -fopenmp-simd -emit-pch -o %t %s
7 // RUN: %clang_cc1 -fopenmp-simd -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
8 
9 // RUN: %clang_cc1 -DOMP51 -verify -fopenmp -fopenmp-version=51 -ast-print %s | FileCheck -check-prefixes=CHECK,OMP51 %s
10 // RUN: %clang_cc1 -DOMP51 -fopenmp -fopenmp-version=51 -emit-pch -o %t %s
11 // RUN: %clang_cc1 -DOMP51 -fopenmp -fopenmp-version=51 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP51 %s
12 
13 // RUN: %clang_cc1 -DOMP51 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s | FileCheck -check-prefixes=CHECK,OMP51 %s
14 // RUN: %clang_cc1 -DOMP51 -fopenmp-simd -fopenmp-version=51 -emit-pch -o %t %s
15 // RUN: %clang_cc1 -DOMP51 -fopenmp-simd -fopenmp-version=51 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP51 %s
16 // expected-no-diagnostics
17 
18 #ifndef HEADER
19 #define HEADER
20 
21 // CHECK: struct vec {
22 struct vec {
23   int len;
24   double *data;
25 };
26 // CHECK: };
27 
28 // CHECK: struct dat {
29 struct dat {
30   int i;
31   double d;
32 #pragma omp declare mapper(id: struct vec v) map(v.len)
33 // CHECK: #pragma omp declare mapper (id : struct vec v) map(tofrom: v.len){{$}}
34 };
35 // CHECK: };
36 
37 #pragma omp declare mapper(id: struct vec v) map(v.len)
38 // CHECK: #pragma omp declare mapper (id : struct vec v) map(tofrom: v.len){{$}}
39 #pragma omp declare mapper(default : struct vec kk) map(kk.len) map(kk.data[0:2])
40 // CHECK: #pragma omp declare mapper (default : struct vec kk) map(tofrom: kk.len) map(tofrom: kk.data[0:2]){{$}}
41 #pragma omp declare mapper(struct dat d) map(to: d.d)
42 // CHECK: #pragma omp declare mapper (default : struct dat d) map(to: d.d){{$}}
43 
44 // CHECK: int main() {
main()45 int main() {
46 #pragma omp declare mapper(id: struct vec v) map(v.len)
47 // CHECK: #pragma omp declare mapper (id : struct vec v) map(tofrom: v.len)
48   {
49 #pragma omp declare mapper(id: struct vec v) map(v.len)
50 // CHECK: #pragma omp declare mapper (id : struct vec v) map(tofrom: v.len)
51     struct vec vv;
52     struct dat dd[10];
53 #pragma omp target map(mapper(id) alloc: vv)
54 // CHECK: #pragma omp target map(mapper(id),alloc: vv)
55     { vv.len++; }
56 #pragma omp target map(mapper(default), from: dd[0:10])
57 // CHECK: #pragma omp target map(mapper(default),from: dd[0:10])
58     { dd[0].i++; }
59 #pragma omp target update to(mapper(id): vv) from(mapper(default): dd[0:10])
60 // CHECK: #pragma omp target update to(mapper(id): vv) from(mapper(default): dd[0:10])
61 #ifdef OMP51
62 #pragma omp target update to(mapper(id) present: vv) from(mapper(default), present: dd[0:10])
63 // OMP51: #pragma omp target update to(mapper(id), present: vv) from(mapper(default), present: dd[0:10])
64 #pragma omp target update to(present mapper(id): vv) from(present, mapper(default): dd[0:10])
65 // OMP51: #pragma omp target update to(present, mapper(id): vv) from(present, mapper(default): dd[0:10])
66 #endif
67   }
68   return 0;
69 }
70 // CHECK: }
71 
72 #endif
73