14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-no-diagnostics
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#ifndef HEADER
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#define HEADER
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid foo() {}
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <class T>
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct S {
134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  operator T() {return T();}
144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  static T TS;
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp threadprivate(TS)
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:      template <class T = int> struct S {
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:        static int TS;
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT:   #pragma omp threadprivate(S<int>::TS)
214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: }
224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:      template <class T = char> struct S {
234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:        static char TS;
244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT:   #pragma omp threadprivate(S<char>::TS)
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: }
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:      template <class T> struct S {
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:        static T TS;
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT:   #pragma omp threadprivate(S::TS)
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:      };
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <typename T, int C>
324967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarT tmain(T argc, T *argv) {
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T b = argc, c, d, e, f, g;
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  static T h;
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S<T> s;
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T arr[C][10], arr1[C];
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T i, j, a[20];
384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel
394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  h=2;
404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel default(none), private(argc,b) firstprivate(argv) shared (d) if (parallel:argc > 0) num_threads(C) proc_bind(master) reduction(+:c, arr1[argc]) reduction(max:e, arr[:C][0:10])
414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (C) num_threads(s) proc_bind(close) reduction(^:e, f, arr[0:C][:argc]) reduction(&& : g)
434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (target:argc > 0)
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (parallel:argc > 0)
474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (C)
494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(i)
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(a[0:10], i)
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(to: i) map(from: j)
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(always,alloc: i)
574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel nowait
594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel depend(in : argc, argv[i:argc], a[:])
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel defaultmap(tofrom: scalar)
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return 0;
654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: template <typename T = int, int C = 5> int tmain(int argc, int *argv) {
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: int b = argc, c, d, e, f, g;
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: static int h;
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: S<int> s;
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: int arr[5][10], arr1[5];
724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: int i, j, a[20]
734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel
744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: h = 2;
754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(5) proc_bind(master) reduction(+: c,arr1[argc]) reduction(max: e,arr[:5][0:10])
764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(5) num_threads(s) proc_bind(close) reduction(^: e,f,arr[0:5][:argc]) reduction(&&: g)
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)
804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)
824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(5)
844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)
884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)
904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)
924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel nowait
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)
984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: template <typename T = char, int C = 1> char tmain(char argc, char *argv) {
1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: char b = argc, c, d, e, f, g;
1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: static char h;
1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: S<char> s;
1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: char arr[1][10], arr1[1];
1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: char i, j, a[20]
1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel
1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: h = 2;
1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(1) proc_bind(master) reduction(+: c,arr1[argc]) reduction(max: e,arr[:1][0:10])
1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(1) num_threads(s) proc_bind(close) reduction(^: e,f,arr[0:1][:argc]) reduction(&&: g)
1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)
1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(1)
1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)
1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel nowait
1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])
1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: T b = argc, c, d, e, f, g;
1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: static T h;
1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: S<T> s;
1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: T arr[C][10], arr1[C];
1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: T i, j, a[20]
1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel
1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: h = 2;
1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(C) proc_bind(master) reduction(+: c,arr1[argc]) reduction(max: e,arr[:C][0:10])
1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(C) num_threads(s) proc_bind(close) reduction(^: e,f,arr[0:C][:argc]) reduction(&&: g)
1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)
1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)
1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(C)
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)
1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)
1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel nowait
1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])
1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)
1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo()
1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: int main(int argc, char **argv) {
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint main (int argc, char **argv) {
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i, j, a[20];
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: int i, j, a[20]
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel
1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel
1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (argc > 0)
1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(argc > 0)
1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (target: argc > 0)
1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)
1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel if (parallel: argc > 0)
1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)
1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(i) if(argc>0)
1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: i) if(argc > 0)
1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(i)
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(a[0:10], i)
1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)
1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(to: i) map(from: j)
2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)
2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel map(always,alloc: i)
2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)
2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel nowait
2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel nowait
2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel depend(in : argc, argv[i:argc], a[:])
2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])
2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel defaultmap(tofrom: scalar)
2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)
2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  foo();
2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-NEXT: foo();
2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarextern template int S<int>::TS;
2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarextern template char S<char>::TS;
2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
234