187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp %s
287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarvoid foo() {
487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarbool foobool(int argc) {
787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  return argc;
887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
1087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarstruct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
1187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarextern S1 a;
1287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarclass S2 {
1387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  mutable int a;
1487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
1587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarpublic:
1687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S2() : a(0) {}
1787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S2(S2 &s2) : a(s2.a) {}
1887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  const S2 &operator =(const S2&) const;
1987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S2 &operator =(const S2&);
2087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  static float S2s; // expected-note {{static data member is predetermined as shared}}
2187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  static const float S2sc;
2287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar};
2387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarconst float S2::S2sc = 0; // expected-note {{static data member is predetermined as shared}}
2487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarconst S2 b;
2587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarconst S2 ba[5];
2687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarclass S3 {
2787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int a;
2887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S3 &operator=(const S3 &s3); // expected-note 2 {{implicitly declared private here}}
2987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
3087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarpublic:
3187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S3() : a(0) {}
3287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S3(S3 &s3) : a(s3.a) {}
3387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar};
3487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarconst S3 c;         // expected-note {{global variable is predetermined as shared}}
3587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarconst S3 ca[5];     // expected-note {{global variable is predetermined as shared}}
3687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarextern const int f; // expected-note {{global variable is predetermined as shared}}
3787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarclass S4 {
3887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int a;
3987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S4();             // expected-note 3 {{implicitly declared private here}}
4087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S4(const S4 &s4);
4187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
4287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarpublic:
4387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S4(int v) : a(v) {}
4487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar};
4587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarclass S5 {
4687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int a;
4787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S5() : a(0) {} // expected-note {{implicitly declared private here}}
4887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
4987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarpublic:
5087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S5(const S5 &s5) : a(s5.a) {}
5187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S5(int v) : a(v) {}
5287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar};
5387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarclass S6 {
5487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int a;
5587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S6() : a(0) {}
5687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
5787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarpublic:
5887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S6(const S6 &s6) : a(s6.a) {}
5987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S6(int v) : a(v) {}
6087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar};
6187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
6287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarS3 h;
6387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}
6487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
6587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainartemplate <class I, class C>
6687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarint foomain(int argc, char **argv) {
6787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  I e(4);
6887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  I g(5);
6987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int i;
7087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int &j = i;
7187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
7287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate // expected-error {{expected '(' after 'lastprivate'}}
7387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
7487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
7587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
7687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
7787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
7887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
7987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
8087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate() // expected-error {{expected expression}}
8187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
8287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
8387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
8487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
8587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
8687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
8787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
8887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
8987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
9087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
9187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
9287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
9387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
9487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
9587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
9687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc)
9787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
9887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
9987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
10087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(S1) // expected-error {{'S1' does not refer to a value}}
10187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
10287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
10387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
10487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(a, b) // expected-error {{lastprivate variable with incomplete type 'S1'}}
10587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
10687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
10787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
10887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argv[1]) // expected-error {{expected variable name}}
10987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
11087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
11187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
11287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(e, g) // expected-error 2 {{calling a private constructor of class 'S4'}}
11387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
11487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
11587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
11687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}
11787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
11887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
11987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
12087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  {
12187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    int v = 0;
12287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    int i;
12387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(i)
12487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    for (int k = 0; k < argc; ++k) {
12587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      i = k;
12687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      v += i;
12787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    }
12887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  }
12987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel shared(i)
13087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel private(i)
13187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(j)
13287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
13387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
13487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
13587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(i)
13687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int k = 0; k < argc; ++k)
13787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    ++k;
13887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  return 0;
13987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
14087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
14187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarvoid bar(S4 a[2]) {
14287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
14387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(a)
14487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (int i = 0; i < 2; ++i)
14587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
14687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
14787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
14887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace A {
14987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainardouble x;
15087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}
15187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
15287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace B {
15387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarusing A::x;
15487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
15587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
15687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarint main(int argc, char **argv) {
15787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  const int d = 5;       // expected-note {{constant variable is predetermined as shared}}
15887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  const int da[5] = {0}; // expected-note {{constant variable is predetermined as shared}}
15987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S4 e(4);
16087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S5 g(5);
16187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S3 m;
16287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  S6 n(2);
16387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int i;
16487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int &j = i;
16587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
16687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate // expected-error {{expected '(' after 'lastprivate'}}
16787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
16887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
16987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
17087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
17187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
17287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
17387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
17487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate() // expected-error {{expected expression}}
17587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
17687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
17787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
17887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
17987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
18087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
18187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
18287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
18387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
18487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
18587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
18687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
18787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
18887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
18987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
19087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argc)
19187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
19287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
19387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
19487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(S1) // expected-error {{'S1' does not refer to a value}}
19587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
19687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
19787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
19887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(a, b, c, d, f) // expected-error {{lastprivate variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be lastprivate}}
19987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
20087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
20187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
20287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(argv[1]) // expected-error {{expected variable name}}
20387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
20487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
20587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
20687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(2 * 2) // expected-error {{expected variable name}}
20787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
20887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
20987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
21087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(ba)
21187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
21287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
21387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
21487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(ca) // expected-error {{shared variable cannot be lastprivate}}
21587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
21687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
21787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
21887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(da) // expected-error {{shared variable cannot be lastprivate}}
21987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
22087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
22187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  int xa;
22287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
22387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(xa) // OK
22487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
22587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
22687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
22787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(S2::S2s) // expected-error {{shared variable cannot be lastprivate}}
22887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
22987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
23087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
23187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(S2::S2sc) // expected-error {{shared variable cannot be lastprivate}}
23287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
23387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
23487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
23587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp taskloop'}}
23687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
23787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
23887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
23987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}
24087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
24187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
24287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
24387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}}
24487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
24587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
24687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
24787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}
24887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
24987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
25087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
25187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(B::x) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}
25287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
25387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
25487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
25587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}}
25687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
25787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
25887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
25987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(i)
26087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
26187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
26287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel private(xa)
26387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(xa)
26487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
26587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
26687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel reduction(+ : xa)
26787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(xa)
26887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
26987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
27087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
27187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(j)
27287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
27387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
27487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
27587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop firstprivate(m) lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}}
27687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
27787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
27887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp parallel
27987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(n) firstprivate(n) // OK
28087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
28187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    foo();
28287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  static int si;
28387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp taskloop lastprivate(si) // OK
28487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  for (i = 0; i < argc; ++i)
28587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar    si = i + 1;
28687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}}
28787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
288