14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid foo();
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <class T, typename S, int N>
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarT tmain(T argc, S **argv) {
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T i;
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind // expected-error {{expected '(' after 'proc_bind'}}
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind( // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'proc_bind' clause}}
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(master)
424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp parallel proc_bind(close)
464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(spread)
494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return T();
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint main(int argc, char **argv) {
564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i;
574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind // expected-error {{expected '(' after 'proc_bind'}}
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind( // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'proc_bind' clause}}
804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(master)
914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp parallel proc_bind(close)
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute parallel for proc_bind(spread)
984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return tmain<int, char, 3>(argc, argv);
1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
102