1 | // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s |
2 | // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++98 %s |
3 | // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 %s |
4 | |
5 | // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s |
6 | // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++98 %s |
7 | // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++11 %s |
8 | |
9 | int temp; // expected-note {{'temp' declared here}} |
10 | |
11 | class vec { // expected-note {{definition of 'vec' is not complete until the closing '}'}} |
12 | private: |
13 | int p; // expected-note {{declared private here}} |
14 | public: |
15 | int len; |
16 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-error {{member access into incomplete type 'vec'}} |
17 | double *data; |
18 | }; |
19 | |
20 | #pragma omp declare mapper // expected-error {{expected '(' after 'declare mapper'}} |
21 | #pragma omp declare mapper { // expected-error {{expected '(' after 'declare mapper'}} |
22 | #pragma omp declare mapper( // expected-error {{expected a type}} expected-error {{expected declarator on 'omp declare mapper' directive}} |
23 | #pragma omp declare mapper(# // expected-error {{expected a type}} expected-error {{expected declarator on 'omp declare mapper' directive}} |
24 | #pragma omp declare mapper(v // expected-error {{unknown type name 'v'}} expected-error {{expected declarator on 'omp declare mapper' directive}} |
25 | #pragma omp declare mapper(vec // expected-error {{expected declarator on 'omp declare mapper' directive}} |
26 | #pragma omp declare mapper(S v // expected-error {{unknown type name 'S'}} |
27 | #pragma omp declare mapper(vec v // expected-error {{expected ')'}} expected-note {{to match this '('}} |
28 | #pragma omp declare mapper(aa: vec v) // expected-error {{expected at least one clause on '#pragma omp declare mapper' directive}} |
29 | #pragma omp declare mapper(bb: vec v) private(v) // expected-error {{expected at least one clause on '#pragma omp declare mapper' directive}} // expected-error {{unexpected OpenMP clause 'private' in directive '#pragma omp declare mapper'}} |
30 | #pragma omp declare mapper(cc: vec v) map(v) ( // expected-warning {{extra tokens at the end of '#pragma omp declare mapper' are ignored}} |
31 | |
32 | #pragma omp declare mapper(++: vec v) map(v.len) // expected-error {{illegal OpenMP user-defined mapper identifier}} |
33 | #pragma omp declare mapper(id1: vec v) map(v.len, temp) // expected-error {{only variable v is allowed in map clauses of this 'omp declare mapper' directive}} |
34 | #pragma omp declare mapper(default : vec kk) map(kk.data[0:2]) // expected-note {{previous definition is here}} |
35 | #pragma omp declare mapper(vec v) map(v.len) // expected-error {{redefinition of user-defined mapper for type 'vec' with name 'default'}} |
36 | #pragma omp declare mapper(int v) map(v) // expected-error {{mapper type must be of struct, union or class type}} |
37 | #pragma omp declare mapper(id2: vec v) map(v.len, v.p) // expected-error {{'p' is a private member of 'vec'}} |
38 | |
39 | namespace N1 { |
40 | template <class T> |
41 | class stack { // expected-note {{template is declared here}} |
42 | public: |
43 | int len; |
44 | T *data; |
45 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-note {{previous definition is here}} |
46 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-error {{redefinition of user-defined mapper for type 'vec' with name 'id'}} |
47 | }; |
48 | }; |
49 | |
50 | #pragma omp declare mapper(default : N1::stack s) map(s.len) // expected-error {{use of class template 'N1::stack' requires template arguments}} |
51 | #pragma omp declare mapper(id1: N1::stack<int> s) map(s.data) |
52 | #pragma omp declare mapper(default : S<int> s) map(s.len) // expected-error {{no template named 'S'}} |
53 | |
54 | template <class T> |
55 | T foo(T a) { |
56 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-note {{previous definition is here}} |
57 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-error {{redefinition of user-defined mapper for type 'vec' with name 'id'}} |
58 | } |
59 | |
60 | int fun(int arg) { |
61 | #pragma omp declare mapper(id: vec v) map(v.len) |
62 | { |
63 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-note {{previous definition is here}} |
64 | { |
65 | #pragma omp declare mapper(id: vec v) map(v.len) |
66 | vec vv, v1; |
67 | #pragma omp target map(mapper) // expected-error {{use of undeclared identifier 'mapper'}} |
68 | {} |
69 | #pragma omp target map(mapper:vv) // expected-error {{expected '(' after 'mapper'}} |
70 | {} |
71 | #pragma omp target map(mapper( :vv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} |
72 | {} |
73 | #pragma omp target map(mapper(aa :vv) // expected-error {{use of undeclared identifier 'aa'}} expected-error {{expected ')'}} expected-note {{to match this '('}} |
74 | {} |
75 | #pragma omp target map(mapper(ab) :vv) // expected-error {{missing map type}} expected-error {{cannot find a valid user-defined mapper for type 'vec' with name 'ab'}} |
76 | {} |
77 | #pragma omp target map(mapper(N2::) :vv) // expected-error {{use of undeclared identifier 'N2'}} expected-error {{illegal OpenMP user-defined mapper identifier}} |
78 | {} |
79 | #pragma omp target map(mapper(N1::) :vv) // expected-error {{illegal OpenMP user-defined mapper identifier}} |
80 | {} |
81 | #pragma omp target map(mapper(aa) :vv) // expected-error {{missing map type}} |
82 | {} |
83 | #pragma omp target map(mapper(N1::aa) alloc:vv) // expected-error {{cannot find a valid user-defined mapper for type 'vec' with name 'aa'}} |
84 | {} |
85 | #pragma omp target map(mapper(aa) to:vv) map(close mapper(aa) from:v1) |
86 | {} |
87 | #pragma omp target map(mapper(N1::stack<int>::id) to:vv) |
88 | {} |
89 | |
90 | #pragma omp target update to(mapper) // expected-error {{expected '(' after 'mapper'}} expected-error {{expected expression}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
91 | #pragma omp target update to(mapper() // expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected expression}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
92 | #pragma omp target update to(mapper:vv) // expected-error {{expected '(' after 'mapper'}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
93 | #pragma omp target update to(mapper(:vv) // expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
94 | #pragma omp target update to(mapper(aa :vv) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
95 | #pragma omp target update to(mapper(N2:: :vv) // expected-error {{use of undeclared identifier 'N2'}} expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
96 | #pragma omp target update to(mapper(N1:: :vv) // expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
97 | #pragma omp target update to(mapper(N1::aa) :vv) // expected-error {{cannot find a valid user-defined mapper for type 'vec' with name 'aa'}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
98 | #pragma omp target update to(mapper(ab):vv) // expected-error {{cannot find a valid user-defined mapper for type 'vec' with name 'ab'}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
99 | #pragma omp target update to(mapper(aa) a:vv) // expected-warning {{missing ':' after ) - ignoring}} |
100 | #pragma omp target update to(mapper(aa):vv) |
101 | #pragma omp target update to(mapper(N1::stack<int>::id) :vv) |
102 | |
103 | #pragma omp target update from(mapper) // expected-error {{expected '(' after 'mapper'}} expected-error {{expected expression}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
104 | #pragma omp target update from(mapper() // expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected expression}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
105 | #pragma omp target update from(mapper:vv) // expected-error {{expected '(' after 'mapper'}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
106 | #pragma omp target update from(mapper(:vv) // expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
107 | #pragma omp target update from(mapper(aa :vv) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
108 | #pragma omp target update from(mapper(N2:: :vv) // expected-error {{use of undeclared identifier 'N2'}} expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
109 | #pragma omp target update from(mapper(N1:: :vv) // expected-error {{illegal OpenMP user-defined mapper identifier}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
110 | #pragma omp target update from(mapper(N1::aa) :vv) // expected-error {{cannot find a valid user-defined mapper for type 'vec' with name 'aa'}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
111 | #pragma omp target update from(mapper(ab):vv) // expected-error {{cannot find a valid user-defined mapper for type 'vec' with name 'ab'}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}} |
112 | #pragma omp target update from(mapper(aa) a:vv) // expected-warning {{missing ':' after ) - ignoring}} |
113 | #pragma omp target update from(mapper(aa):vv) |
114 | #pragma omp target update from(mapper(N1::stack<int>::id) :vv) |
115 | } |
116 | #pragma omp declare mapper(id: vec v) map(v.len) // expected-error {{redefinition of user-defined mapper for type 'vec' with name 'id'}} |
117 | } |
118 | return arg; |
119 | } |
120 | |