14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp %s
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid foo() {
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarbool foobool(int argc) {
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return argc;
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarextern S1 a;
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass S2 {
134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  mutable int a;
144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic:
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S2() : a(0) {}
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S2(S2 &s2) : a(s2.a) {}
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  const S2 &operator =(const S2&) const;
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S2 &operator =(const S2&);
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  static float S2s; // expected-note {{static data member is predetermined as shared}}
214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  static const float S2sc;
224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarconst float S2::S2sc = 0; // expected-note {{static data member is predetermined as shared}}
244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarconst S2 b;
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarconst S2 ba[5];
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass S3 {
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S3 &operator=(const S3 &s3); // expected-note 2 {{implicitly declared private here}}
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic:
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S3() : a(0) {}
324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S3(S3 &s3) : a(s3.a) {}
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarconst S3 c;         // expected-note {{global variable is predetermined as shared}}
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarconst S3 ca[5];     // expected-note {{global variable is predetermined as shared}}
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarextern const int f; // expected-note {{global variable is predetermined as shared}}
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass S4 {
384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S4();             // expected-note 3 {{implicitly declared private here}}
404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S4(const S4 &s4);
414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic:
434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S4(int v) : a(v) {}
444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass S5 {
464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S5() : a(0) {} // expected-note {{implicitly declared private here}}
484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic:
504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S5(const S5 &s5) : a(s5.a) {}
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S5(int v) : a(v) {}
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass S6 {
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S6() : a(0) {}
564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic:
584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S6(const S6 &s6) : a(s6.a) {}
594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S6(int v) : a(v) {}
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarS3 h;
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}
644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <class I, class C>
664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint foomain(int argc, char **argv) {
674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  I e(4);
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  I g(5);
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i;
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int &j = i;
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate // expected-error {{expected '(' after 'lastprivate'}}
744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate() // expected-error {{expected expression}}
844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc)
1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(S1) // expected-error {{'S1' does not refer to a value}}
1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(a, b) // expected-error {{lastprivate variable with incomplete type 'S1'}}
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argv[1]) // expected-error {{expected variable name}}
1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(e, g) // expected-error 2 {{calling a private constructor of class 'S4'}}
1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}
1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int v = 0;
1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {
1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(i)
1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    for (int k = 0; k < argc; ++k) {
1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      i = k;
1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      v += i;
1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    }
1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  }
1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams private(i)
1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(j)
1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(i)
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    ++k;
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return 0;
1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid bar(S4 a[2]) {
1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(a)
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (int i = 0; i < 2; ++i)
1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace A {
1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainardouble x;
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace B {
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarusing A::x;
1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint main(int argc, char **argv) {
1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  const int d = 5;       // expected-note {{constant variable is predetermined as shared}}
1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  const int da[5] = {0}; // expected-note {{constant variable is predetermined as shared}}
1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S4 e(4);
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S5 g(5);
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S3 m;
1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  S6 n(2);
1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i;
1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int &j = i;
1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate // expected-error {{expected '(' after 'lastprivate'}}
1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate() // expected-error {{expected expression}}
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argc)
2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(S1) // expected-error {{'S1' does not refer to a value}}
2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(a, b, c, d, f) // expected-error {{lastprivate variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be lastprivate}}
2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(argv[1]) // expected-error {{expected variable name}}
2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(2 * 2) // expected-error {{expected variable name}}
2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(ba)
2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(ca) // expected-error {{shared variable cannot be lastprivate}}
2434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(da) // expected-error {{shared variable cannot be lastprivate}}
2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int xa;
2514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(xa) // OK
2544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(S2::S2s) // expected-error {{shared variable cannot be lastprivate}}
2594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(S2::S2sc) // expected-error {{shared variable cannot be lastprivate}}
2644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd safelen(5) // OK
2694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}
2744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}}
2794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}
2844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(B::x) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}
2894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}}
2944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
2954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
2964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
2974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
2984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(i) // expected-note {{defined as lastprivate}}
2994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i) // expected-error{{loop iteration variable in the associated loop of 'omp distribute simd' directive may not be lastprivate, predetermined as linear}}
3004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
3014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
3024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
3034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(xa)
3044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
3054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
3064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
3074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
3084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(xa)
3094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
3104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
3114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
3124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
3134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(j)
3144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
3154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
3164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
3174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd firstprivate(m) lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}}
3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(n) firstprivate(n) // OK
3244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
3254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    foo();
3264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  static int si;
3274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target
3284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp teams
3294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp distribute simd lastprivate(si) // OK
3304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
3314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    si = i + 1;
3324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}}
3334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
334