Clang Project

clang_source_code/test/OpenMP/teams_ast_print.cpp
1// 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
5// RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s
6// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s
7// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
8// expected-no-diagnostics
9
10#ifndef HEADER
11#define HEADER
12
13void foo() {}
14
15template <class T>
16struct S {
17  operator T() {return T();}
18  static T TS;
19  #pragma omp threadprivate(TS)
20};
21
22// CHECK:      template <class T> struct S {
23// CHECK:        static T TS;
24// CHECK-NEXT:   #pragma omp threadprivate(S::TS)
25// CHECK:      };
26// CHECK:      template<> struct S<int> {
27// CHECK:        static int TS;
28// CHECK-NEXT:   #pragma omp threadprivate(S<int>::TS)
29// CHECK-NEXT: }
30// CHECK:      template<> struct S<long> {
31// CHECK:        static long TS;
32// CHECK-NEXT:   #pragma omp threadprivate(S<long>::TS)
33// CHECK-NEXT: }
34
35template <typename T, int C>
36T tmain(T argc, T *argv) {
37  T b = argc, c, d, e, f, g;
38  static T a;
39  S<T> s;
40#pragma omp target
41#pragma omp teams
42  a=2;
43#pragma omp target
44#pragma omp teams default(none), private(argc,b) firstprivate(argv) shared (d) reduction(+:c) reduction(max:e) num_teams(C) thread_limit(d*C)
45  foo();
46#pragma omp target
47#pragma omp teams reduction(^:e, f) reduction(&& : g)
48  foo();
49  return 0;
50}
51
52// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
53// CHECK-NEXT: T b = argc, c, d, e, f, g;
54// CHECK-NEXT: static T a;
55// CHECK-NEXT: S<T> s;
56// CHECK-NEXT: #pragma omp target
57// CHECK-NEXT: #pragma omp teams{{$}}
58// CHECK-NEXT: a = 2;
59// CHECK-NEXT: #pragma omp target
60// CHECK-NEXT: #pragma omp teams default(none) private(argc,b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(C) thread_limit(d * C)
61// CHECK-NEXT: foo()
62// CHECK-NEXT: #pragma omp target
63// CHECK-NEXT: #pragma omp teams reduction(^: e,f) reduction(&&: g)
64// CHECK-NEXT: foo()
65// CHECK: template<> int tmain<int, 5>(int argc, int *argv) {
66// CHECK-NEXT: int b = argc, c, d, e, f, g;
67// CHECK-NEXT: static int a;
68// CHECK-NEXT: S<int> s;
69// CHECK-NEXT: #pragma omp target
70// CHECK-NEXT: #pragma omp teams
71// CHECK-NEXT: a = 2;
72// CHECK-NEXT: #pragma omp target
73// CHECK-NEXT: #pragma omp teams default(none) private(argc,b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(5) thread_limit(d * 5)
74// CHECK-NEXT: foo()
75// CHECK-NEXT: #pragma omp target
76// CHECK-NEXT: #pragma omp teams reduction(^: e,f) reduction(&&: g)
77// CHECK-NEXT: foo()
78// CHECK: template<> long tmain<long, 1>(long argc, long *argv) {
79// CHECK-NEXT: long b = argc, c, d, e, f, g;
80// CHECK-NEXT: static long a;
81// CHECK-NEXT: S<long> s;
82// CHECK-NEXT: #pragma omp target
83// CHECK-NEXT: #pragma omp teams
84// CHECK-NEXT: a = 2;
85// CHECK-NEXT: #pragma omp target
86// CHECK-NEXT: #pragma omp teams default(none) private(argc,b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(1) thread_limit(d * 1)
87// CHECK-NEXT: foo()
88// CHECK-NEXT: #pragma omp target
89// CHECK-NEXT: #pragma omp teams reduction(^: e,f) reduction(&&: g)
90// CHECK-NEXT: foo()
91
92enum Enum { };
93
94int main (int argc, char **argv) {
95  long x;
96  int b = argc, c, d, e, f, g;
97  static int a;
98  #pragma omp threadprivate(a)
99  Enum ee;
100// CHECK: Enum ee;
101#pragma omp target
102#pragma omp teams
103// CHECK-NEXT: #pragma omp target
104// CHECK-NEXT: #pragma omp teams
105  a=2;
106// CHECK-NEXT: a = 2;
107#pragma omp target
108#pragma omp teams default(none), private(argc,b) num_teams(f) firstprivate(argv) reduction(| : c, d) reduction(* : e) thread_limit(f+g)
109// CHECK-NEXT: #pragma omp target
110// CHECK-NEXT: #pragma omp teams default(none) private(argc,b) num_teams(f) firstprivate(argv) reduction(|: c,d) reduction(*: e) thread_limit(f + g)
111  foo();
112// CHECK-NEXT: foo();
113  return tmain<int, 5>(b, &b) + tmain<long, 1>(x, &x);
114}
115
116extern template int S<int>::TS;
117extern template long S<long>::TS;
118#endif
119