xref: /llvm-project/clang/test/OpenMP/target_teams_distribute_parallel_for_proc_bind_messages.cpp (revision 0c6f2f629cc0017361310fa4c132090413a874db)
1 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -ferror-limit 100 -o - %s -Wuninitialized
2 
3 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp-simd -ferror-limit 100 -o - %s -Wuninitialized
4 
5 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -ferror-limit 100 -o - %s -Wuninitialized
6 
7 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -ferror-limit 100 -o - %s -Wuninitialized
8 
9 void foo();
10 
11 template <class T, typename S, int N>
tmain(T argc,S ** argv)12 T tmain(T argc, S **argv) {
13   T i;
14 #pragma omp target teams distribute parallel for proc_bind // expected-error {{expected '(' after 'proc_bind'}}
15   for (i = 0; i < argc; ++i)
16     foo();
17 #pragma omp target teams distribute parallel for proc_bind( // omp50-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} omp51-error {{expected 'master', 'close', 'spread' or 'primary' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
18   for (i = 0; i < argc; ++i)
19     foo();
20 #pragma omp target teams distribute parallel for proc_bind() // omp50-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} omp51-error {{expected 'master', 'close', 'spread' or 'primary' in OpenMP clause 'proc_bind'}}
21   for (i = 0; i < argc; ++i)
22     foo();
23 #pragma omp target teams distribute parallel for proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
24   for (i = 0; i < argc; ++i)
25     foo();
26 #pragma omp target teams distribute parallel for proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp target teams distribute parallel for' cannot contain more than one 'proc_bind' clause}}
27   for (i = 0; i < argc; ++i)
28     foo();
29 #pragma omp target teams distribute parallel for proc_bind(x) // omp50-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} omp51-error {{expected 'master', 'close', 'spread' or 'primary' in OpenMP clause 'proc_bind'}}
30   for (i = 0; i < argc; ++i)
31     foo();
32 
33 #pragma omp target teams distribute parallel for proc_bind(master)
34   for (i = 0; i < argc; ++i)
35     foo();
36 
37 #pragma omp parallel proc_bind(close)
38 #pragma omp target teams distribute parallel for proc_bind(spread)
39   for (i = 0; i < argc; ++i)
40     foo();
41 
42   return T();
43 }
44 
main(int argc,char ** argv)45 int main(int argc, char **argv) {
46   int i;
47 #pragma omp target teams distribute parallel for proc_bind // expected-error {{expected '(' after 'proc_bind'}}
48   for (i = 0; i < argc; ++i)
49     foo();
50 #pragma omp target teams distribute parallel for proc_bind( // omp50-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} omp51-error {{expected 'master', 'close', 'spread' or 'primary' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
51   for (i = 0; i < argc; ++i)
52     foo();
53 #pragma omp target teams distribute parallel for proc_bind() // omp50-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} omp51-error {{expected 'master', 'close', 'spread' or 'primary' in OpenMP clause 'proc_bind'}}
54   for (i = 0; i < argc; ++i)
55     foo();
56 #pragma omp target teams distribute parallel for proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
57   for (i = 0; i < argc; ++i)
58     foo();
59 #pragma omp target teams distribute parallel for proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp target teams distribute parallel for' cannot contain more than one 'proc_bind' clause}}
60   for (i = 0; i < argc; ++i)
61     foo();
62 #pragma omp target teams distribute parallel for proc_bind(x) // omp50-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} omp51-error {{expected 'master', 'close', 'spread' or 'primary' in OpenMP clause 'proc_bind'}}
63   for (i = 0; i < argc; ++i)
64     foo();
65 
66 #pragma omp target teams distribute parallel for proc_bind(master)
67   for (i = 0; i < argc; ++i)
68     foo();
69 
70 #pragma omp parallel proc_bind(close)
71 #pragma omp target teams distribute parallel for proc_bind(spread)
72   for (i = 0; i < argc; ++i)
73     foo();
74   return tmain<int, char, 3>(argc, argv);
75 }
76