1 // RUN: %clang_cc1 -w -verify -fopenmp -I %S/Inputs -ast-print %s | FileCheck %s --check-prefix=CHECK
2 // expected-no-diagnostics
4 static int variable
= 100;
5 static float variable1
= 200;
6 static float variable2
= variable1
;
11 static int *var2
= &var1
;
12 static int **ptr1
= &var2
;
15 int (*arrptr
)[2] = &arr
;
22 declare
*obj2
= &obj1
;
30 static int var3
= 100;
31 static int *ptr_3
= &var3
;
34 #pragma omp declare target
35 int target_var
= variable
;
36 float target_var1
= variable2
;
39 int (**ptr3
)[2] = &arrptr
;
40 declare
**obj3
= &obj2
;
42 #pragma omp end declare target
43 #pragma omp declare target(ptr_3)
44 #pragma omp declare target to(c)
46 // CHECK: #pragma omp declare target
47 // CHECK-NEXT: static int variable = 100;
48 // CHECK-NEXT: #pragma omp end declare target
50 // CHECK-NEXT: #pragma omp declare target
51 // CHECK-NEXT: static float variable1 = 200;
52 // CHECK-NEXT: #pragma omp end declare target
53 // CHECK-NEXT: #pragma omp declare target
54 // CHECK-NEXT: static float variable2 = variable1;
55 // CHECK-NEXT: #pragma omp end declare target
57 // CHECK: #pragma omp declare target
58 // CHECK-NEXT: static int var = 1;
59 // CHECK-NEXT: #pragma omp end declare target
61 // CHECK-NEXT: #pragma omp declare target
62 // CHECK-NEXT: static int var1 = 10;
63 // CHECK-NEXT: #pragma omp end declare target
64 // CHECK-NEXT: #pragma omp declare target
65 // CHECK-NEXT: static int *var2 = &var1;
66 // CHECK-NEXT: #pragma omp end declare target
67 // CHECK-NEXT: #pragma omp declare target
68 // CHECK-NEXT: static int **ptr1 = &var2;
69 // CHECK-NEXT: #pragma omp end declare target
71 // CHECK-NEXT: #pragma omp declare target
72 // CHECK-NEXT: int arr[2] = {1, 2};
73 // CHECK-NEXT: #pragma omp end declare target
74 // CHECK-NEXT: #pragma omp declare target
75 // CHECK-NEXT: int (*arrptr)[2] = &arr;
76 // CHECK-NEXT: #pragma omp end declare target
78 // CHECK-NEXT: class declare {
79 // CHECK-NEXT: public:
81 // CHECK-NEXT: void print();
83 // CHECK-NEXT: #pragma omp declare target
84 // CHECK-NEXT: declare obj1;
85 // CHECK-NEXT: #pragma omp end declare target
86 // CHECK-NEXT: #pragma omp declare target
87 // CHECK-NEXT: declare *obj2 = &obj1;
88 // CHECK-NEXT: #pragma omp end declare target
90 // CHECK-NEXT: struct target {
92 // CHECK-NEXT: void print();
94 // CHECK-NEXT: #pragma omp declare target
95 // CHECK-NEXT: static target S;
96 // CHECK-NEXT: #pragma omp end declare target
97 // CHECK-NEXT: #pragma omp declare target
98 // CHECK-NEXT: static int var3 = 100;
99 // CHECK-NEXT: #pragma omp end declare target
100 // CHECK-NEXT: #pragma omp declare target
101 // CHECK-NEXT: static int *ptr_3 = &var3;
102 // CHECK-NEXT: #pragma omp end declare target
103 // CHECK-NEXT: #pragma omp declare target
104 // CHECK-NEXT: static char c = 'a';
105 // CHECK-NEXT: #pragma omp end declare target
106 // CHECK-NEXT: #pragma omp declare target
107 // CHECK-NEXT: int target_var = variable;
108 // CHECK-NEXT: #pragma omp end declare target
109 // CHECK-NEXT: #pragma omp declare target
110 // CHECK-NEXT: float target_var1 = variable2;
111 // CHECK-NEXT: #pragma omp end declare target
112 // CHECK-NEXT: #pragma omp declare target
113 // CHECK-NEXT: int *ptr = &var;
114 // CHECK-NEXT: #pragma omp end declare target
115 // CHECK-NEXT: #pragma omp declare target
116 // CHECK-NEXT: int ***ptr2 = &ptr1;
117 // CHECK-NEXT: #pragma omp end declare target
118 // CHECK-NEXT: #pragma omp declare target
119 // CHECK-NEXT: int (**ptr3)[2] = &arrptr;
120 // CHECK-NEXT: #pragma omp end declare target
121 // CHECK-NEXT: #pragma omp declare target
122 // CHECK-NEXT: declare **obj3 = &obj2;
123 // CHECK-NEXT: #pragma omp end declare target
124 // CHECK-NEXT: #pragma omp declare target
125 // CHECK-NEXT: target *S1 = &S;
126 // CHECK-NEXT: #pragma omp end declare target