blob: ed7a96541196fb306ca0b2b147a2d1c04507cdbb [file] [log] [blame]
Michael Wong65f367f2015-07-21 13:44:28 +00001// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4// expected-no-diagnostics
5
6#ifndef HEADER
7#define HEADER
8
9void foo() {}
10
Kelvin Li0bff7af2015-11-23 05:32:03 +000011template <typename T, int C>
12T tmain(T argc, T *argv) {
13 T i, j, b, c, d, e, x[20];
14
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000015#pragma omp target data map(to: c)
Kelvin Li0bff7af2015-11-23 05:32:03 +000016 i = argc;
17
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000018#pragma omp target data map(to: c) if (target data: j > 0)
Kelvin Li0bff7af2015-11-23 05:32:03 +000019 foo();
20
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000021#pragma omp target data map(to: c) if (b)
Kelvin Li0bff7af2015-11-23 05:32:03 +000022 foo();
23
24#pragma omp target data map(c)
25 foo();
26
27#pragma omp target data map(c) if(b>e)
28 foo();
29
30#pragma omp target data map(x[0:10], c)
31 foo();
32
33#pragma omp target data map(to: c) map(from: d)
34 foo();
35
36#pragma omp target data map(always,alloc: e)
37 foo();
38
39// nesting a target region
40#pragma omp target data map(e)
41{
42 #pragma omp target map(always, alloc: e)
43 foo();
44}
45
46 return 0;
47}
48
49// CHECK: template <typename T = int, int C = 5> int tmain(int argc, int *argv) {
50// CHECK-NEXT: int i, j, b, c, d, e, x[20];
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000051// CHECK-NEXT: #pragma omp target data map(to: c)
Kelvin Li0bff7af2015-11-23 05:32:03 +000052// CHECK-NEXT: i = argc;
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000053// CHECK-NEXT: #pragma omp target data map(to: c) if(target data: j > 0)
Kelvin Li0bff7af2015-11-23 05:32:03 +000054// CHECK-NEXT: foo();
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000055// CHECK-NEXT: #pragma omp target data map(to: c) if(b)
Kelvin Li0bff7af2015-11-23 05:32:03 +000056// CHECK-NEXT: foo();
57// CHECK-NEXT: #pragma omp target data map(tofrom: c)
58// CHECK-NEXT: foo();
59// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > e)
60// CHECK-NEXT: foo();
61// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)
62// CHECK-NEXT: foo();
63// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)
64// CHECK-NEXT: foo();
65// CHECK-NEXT: #pragma omp target data map(always,alloc: e)
66// CHECK-NEXT: foo();
67// CHECK-NEXT: #pragma omp target data map(tofrom: e)
68// CHECK-NEXT: {
69// CHECK-NEXT: #pragma omp target map(always,alloc: e)
70// CHECK-NEXT: foo();
71// CHECK: template <typename T = char, int C = 1> char tmain(char argc, char *argv) {
72// CHECK-NEXT: char i, j, b, c, d, e, x[20];
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000073// CHECK-NEXT: #pragma omp target data map(to: c)
Kelvin Li0bff7af2015-11-23 05:32:03 +000074// CHECK-NEXT: i = argc;
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000075// CHECK-NEXT: #pragma omp target data map(to: c) if(target data: j > 0)
Kelvin Li0bff7af2015-11-23 05:32:03 +000076// CHECK-NEXT: foo();
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000077// CHECK-NEXT: #pragma omp target data map(to: c) if(b)
Kelvin Li0bff7af2015-11-23 05:32:03 +000078// CHECK-NEXT: foo();
79// CHECK-NEXT: #pragma omp target data map(tofrom: c)
80// CHECK-NEXT: foo();
81// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > e)
82// CHECK-NEXT: foo();
83// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)
84// CHECK-NEXT: foo();
85// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)
86// CHECK-NEXT: foo();
87// CHECK-NEXT: #pragma omp target data map(always,alloc: e)
88// CHECK-NEXT: foo();
89// CHECK-NEXT: #pragma omp target data map(tofrom: e)
90// CHECK-NEXT: {
91// CHECK-NEXT: #pragma omp target map(always,alloc: e)
92// CHECK-NEXT: foo();
93// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
94// CHECK-NEXT: T i, j, b, c, d, e, x[20];
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000095// CHECK-NEXT: #pragma omp target data map(to: c)
Kelvin Li0bff7af2015-11-23 05:32:03 +000096// CHECK-NEXT: i = argc;
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000097// CHECK-NEXT: #pragma omp target data map(to: c) if(target data: j > 0)
Kelvin Li0bff7af2015-11-23 05:32:03 +000098// CHECK-NEXT: foo();
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +000099// CHECK-NEXT: #pragma omp target data map(to: c) if(b)
Kelvin Li0bff7af2015-11-23 05:32:03 +0000100// CHECK-NEXT: foo();
101// CHECK-NEXT: #pragma omp target data map(tofrom: c)
102// CHECK-NEXT: foo();
103// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > e)
104// CHECK-NEXT: foo();
105// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)
106// CHECK-NEXT: foo();
107// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)
108// CHECK-NEXT: foo();
109// CHECK-NEXT: #pragma omp target data map(always,alloc: e)
110// CHECK-NEXT: foo();
111// CHECK-NEXT: #pragma omp target data map(tofrom: e)
112// CHECK-NEXT: {
113// CHECK-NEXT: #pragma omp target map(always,alloc: e)
114// CHECK-NEXT: foo();
115
Michael Wong65f367f2015-07-21 13:44:28 +0000116int main (int argc, char **argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +0000117 int b = argc, c, d, e, f, g, x[20];
Michael Wong65f367f2015-07-21 13:44:28 +0000118 static int a;
119// CHECK: static int a;
120
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +0000121#pragma omp target data map(to: c)
122// CHECK: #pragma omp target data map(to: c)
Michael Wong65f367f2015-07-21 13:44:28 +0000123 a=2;
124// CHECK-NEXT: a = 2;
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +0000125#pragma omp target data map(to: c) if (target data: b)
126// CHECK: #pragma omp target data map(to: c) if(target data: b)
Michael Wong65f367f2015-07-21 13:44:28 +0000127 foo();
128// CHECK-NEXT: foo();
129
Arpith Chacko Jacob46a04bb2016-01-21 19:57:55 +0000130#pragma omp target data map(to: c) if (b > g)
131// CHECK: #pragma omp target data map(to: c) if(b > g)
Michael Wong65f367f2015-07-21 13:44:28 +0000132 foo();
133// CHECK-NEXT: foo();
134
Kelvin Li0bff7af2015-11-23 05:32:03 +0000135#pragma omp target data map(c)
136// CHECK-NEXT: #pragma omp target data map(tofrom: c)
137 foo();
138// CHECK-NEXT: foo();
139
140#pragma omp target data map(c) if(b>g)
141// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > g)
142 foo();
143// CHECK-NEXT: foo();
144
145#pragma omp target data map(x[0:10], c)
146// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)
147 foo();
148// CHECK-NEXT: foo();
149
150#pragma omp target data map(to: c) map(from: d)
151// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)
152 foo();
153// CHECK-NEXT: foo();
154
155#pragma omp target data map(always,alloc: e)
156// CHECK-NEXT: #pragma omp target data map(always,alloc: e)
157 foo();
158// CHECK-NEXT: foo();
159
160// nesting a target region
161#pragma omp target data map(e)
162// CHECK-NEXT: #pragma omp target data map(tofrom: e)
163{
164// CHECK-NEXT: {
165 #pragma omp target map(always, alloc: e)
166// CHECK-NEXT: #pragma omp target map(always,alloc: e)
167 foo();
168// CHECK-NEXT: foo();
169}
170 return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
Michael Wong65f367f2015-07-21 13:44:28 +0000171}
172
173#endif