blob: acf032a22120276aedbb6ba7440d644f5d5497b0 [file] [log] [blame]
Alexey Bataevdb390212015-05-20 04:24:19 +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
Alexey Bataev0bd520b2014-09-19 08:19:49 +00004// expected-no-diagnostics
5
6#ifndef HEADER
7#define HEADER
8
9void foo() {}
10
11template <typename T, int C>
12T tmain(T argc, T *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000013 T i, j, a[20];
Alexey Bataev0bd520b2014-09-19 08:19:49 +000014#pragma omp target
15 foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000016#pragma omp target if (target:argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000017 foo();
18#pragma omp target if (C)
19 foo();
Kelvin Li0bff7af2015-11-23 05:32:03 +000020#pragma omp target map(i)
21 foo();
22#pragma omp target map(a[0:10], i)
23 foo();
24#pragma omp target map(to: i) map(from: j)
25 foo();
26#pragma omp target map(always,alloc: i)
27 foo();
Alexey Bataev0bd520b2014-09-19 08:19:49 +000028 return 0;
29}
30
31// CHECK: template <typename T = int, int C = 5> int tmain(int argc, int *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000032// CHECK-NEXT: int i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +000033// CHECK-NEXT: #pragma omp target
34// CHECK-NEXT: foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000035// CHECK-NEXT: #pragma omp target if(target: argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000036// CHECK-NEXT: foo()
37// CHECK-NEXT: #pragma omp target if(5)
38// CHECK-NEXT: foo()
Kelvin Li0bff7af2015-11-23 05:32:03 +000039// CHECK-NEXT: #pragma omp target map(tofrom: i)
40// CHECK-NEXT: foo()
41// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
42// CHECK-NEXT: foo()
43// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
44// CHECK-NEXT: foo()
45// CHECK-NEXT: #pragma omp target map(always,alloc: i)
46// CHECK-NEXT: foo()
Alexey Bataev0bd520b2014-09-19 08:19:49 +000047// CHECK: template <typename T = char, int C = 1> char tmain(char argc, char *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000048// CHECK-NEXT: char i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +000049// CHECK-NEXT: #pragma omp target
50// CHECK-NEXT: foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000051// CHECK-NEXT: #pragma omp target if(target: argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000052// CHECK-NEXT: foo()
53// CHECK-NEXT: #pragma omp target if(1)
54// CHECK-NEXT: foo()
Kelvin Li0bff7af2015-11-23 05:32:03 +000055// CHECK-NEXT: #pragma omp target map(tofrom: i)
56// CHECK-NEXT: foo()
57// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
58// CHECK-NEXT: foo()
59// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
60// CHECK-NEXT: foo()
61// CHECK-NEXT: #pragma omp target map(always,alloc: i)
62// CHECK-NEXT: foo()
Alexey Bataev0bd520b2014-09-19 08:19:49 +000063// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000064// CHECK-NEXT: T i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +000065// CHECK-NEXT: #pragma omp target
66// CHECK-NEXT: foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000067// CHECK-NEXT: #pragma omp target if(target: argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000068// CHECK-NEXT: foo()
69// CHECK-NEXT: #pragma omp target if(C)
70// CHECK-NEXT: foo()
Kelvin Li0bff7af2015-11-23 05:32:03 +000071// CHECK-NEXT: #pragma omp target map(tofrom: i)
72// CHECK-NEXT: foo()
73// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
74// CHECK-NEXT: foo()
75// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
76// CHECK-NEXT: foo()
77// CHECK-NEXT: #pragma omp target map(always,alloc: i)
78// CHECK-NEXT: foo()
Alexey Bataev0bd520b2014-09-19 08:19:49 +000079
80// CHECK-LABEL: int main(int argc, char **argv) {
81int main (int argc, char **argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000082 int i, j, a[20];
83// CHECK-NEXT: int i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +000084#pragma omp target
85// CHECK-NEXT: #pragma omp target
86 foo();
87// CHECK-NEXT: foo();
88#pragma omp target if (argc > 0)
89// CHECK-NEXT: #pragma omp target if(argc > 0)
90 foo();
91// CHECK-NEXT: foo();
Kelvin Li0bff7af2015-11-23 05:32:03 +000092
93#pragma omp target map(i) if(argc>0)
94// CHECK-NEXT: #pragma omp target map(tofrom: i) if(argc > 0)
95 foo();
96// CHECK-NEXT: foo();
97
98#pragma omp target map(i)
99// CHECK-NEXT: #pragma omp target map(tofrom: i)
100 foo();
101// CHECK-NEXT: foo();
102
103#pragma omp target map(a[0:10], i)
104// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
105 foo();
106// CHECK-NEXT: foo();
107
108#pragma omp target map(to: i) map(from: j)
109// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
110 foo();
111// CHECK-NEXT: foo();
112
113#pragma omp target map(always,alloc: i)
114// CHECK-NEXT: #pragma omp target map(always,alloc: i)
115 foo();
116// CHECK-NEXT: foo();
117
Alexey Bataev0bd520b2014-09-19 08:19:49 +0000118 return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
119}
120
121#endif