blob: 2b54b43b87c66087beddf8d6880918183f579b20 [file] [log] [blame]
Alexey Bataevdb390212015-05-20 04:24:19 +00001// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s
Alexey Bataevd48bcd82014-03-31 03:36:38 +00002
3void foo() {
4}
5
6bool foobool(int argc) {
7 return argc;
8}
9
10struct S1; // expected-note {{declared here}}
11class S2 {
12 mutable int a;
13public:
14 S2():a(0) { }
15 S2 & operator =(S2 &s2) { return *this; }
16};
17class S3 {
18 int a;
19public:
20 S3():a(0) { }
21 S3 &operator =(S3 &s3) { return *this; }
22};
Alexey Bataevf56f98c2015-04-16 05:39:01 +000023class S4 {
Alexey Bataevd48bcd82014-03-31 03:36:38 +000024 int a;
25 S4();
Alexey Bataevf56f98c2015-04-16 05:39:01 +000026 S4 &operator =(const S4 &s4); // expected-note {{implicitly declared private here}}
Alexey Bataevd48bcd82014-03-31 03:36:38 +000027public:
28 S4(int v):a(v) { }
29};
Alexey Bataevf56f98c2015-04-16 05:39:01 +000030class S5 {
Alexey Bataevd48bcd82014-03-31 03:36:38 +000031 int a;
32 S5():a(0) {}
Alexey Bataevf56f98c2015-04-16 05:39:01 +000033 S5 &operator =(const S5 &s5) { return *this; } // expected-note {{implicitly declared private here}}
Alexey Bataevd48bcd82014-03-31 03:36:38 +000034public:
35 S5(int v):a(v) { }
36};
37template <class T>
38class ST {
39public:
40 static T s;
41};
42
Alexey Bataev6ddfe1a2015-04-16 13:49:42 +000043namespace A {
44double x;
45#pragma omp threadprivate(x)
46}
47namespace B {
48using A::x;
49}
Alexey Bataevd48bcd82014-03-31 03:36:38 +000050
51S2 k;
52S3 h;
Alexey Bataevf56f98c2015-04-16 05:39:01 +000053S4 l(3);
54S5 m(4);
Alexey Bataevd48bcd82014-03-31 03:36:38 +000055#pragma omp threadprivate(h, k, l, m)
56
57int main(int argc, char **argv) {
58 int i;
59 #pragma omp parallel copyin // expected-error {{expected '(' after 'copyin'}}
60 #pragma omp parallel copyin ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
61 #pragma omp parallel copyin () // expected-error {{expected expression}}
62 #pragma omp parallel copyin (k // expected-error {{expected ')'}} expected-note {{to match this '('}}
Alexey Bataevc5970622016-04-01 08:43:42 +000063 #pragma omp parallel copyin (h, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
Alexey Bataevd48bcd82014-03-31 03:36:38 +000064 #pragma omp parallel copyin (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
Alexey Bataevf56f98c2015-04-16 05:39:01 +000065 #pragma omp parallel copyin (l) // expected-error {{'operator=' is a private member of 'S4'}}
Alexey Bataevd48bcd82014-03-31 03:36:38 +000066 #pragma omp parallel copyin (S1) // expected-error {{'S1' does not refer to a value}}
67 #pragma omp parallel copyin (argv[1]) // expected-error {{expected variable name}}
68 #pragma omp parallel copyin(i) // expected-error {{copyin variable must be threadprivate}}
Alexey Bataevf56f98c2015-04-16 05:39:01 +000069 #pragma omp parallel copyin(m) // expected-error {{'operator=' is a private member of 'S5'}}
Alexey Bataevd48bcd82014-03-31 03:36:38 +000070 #pragma omp parallel copyin(ST<int>::s) // expected-error {{copyin variable must be threadprivate}}
Alexey Bataev6ddfe1a2015-04-16 13:49:42 +000071 #pragma omp parallel copyin(B::x)
Alexey Bataevd48bcd82014-03-31 03:36:38 +000072 foo();
73
74 return 0;
75}