1 // RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -fnoopenmp-use-tls -ferror-limit 100 -o - %s 2 3 // RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp-simd -fnoopenmp-use-tls -ferror-limit 100 -o - %s 4 5 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 6 7 int a, b; // expected-warning {{declaration is not declared in any declare target region}} 8 __thread int t; // expected-note {{defined as threadprivate or thread local}} 9 10 #pragma omp declare target . // expected-error {{expected '(' after 'declare target'}} 11 12 #pragma omp declare target 13 void f(); 14 #pragma omp end declare target shared(a) // expected-warning {{extra tokens at the end of '#pragma omp end declare target' are ignored}} 15 16 #pragma omp declare target map(a) // expected-error {{unexpected 'map' clause, only 'to' or 'link' clauses expected}} 17 18 #pragma omp declare target to(foo1) // expected-error {{use of undeclared identifier 'foo1'}} 19 20 #pragma omp declare target link(foo2) // expected-error {{use of undeclared identifier 'foo2'}} 21 22 void c(); // expected-warning {{declaration is not declared in any declare target region}} 23 24 void func() {} // expected-note {{'func' defined here}} 25 26 #pragma omp declare target link(func) // expected-error {{function name is not allowed in 'link' clause}} 27 28 extern int b; 29 30 struct NonT { 31 int a; 32 }; 33 34 typedef int sint; 35 36 #pragma omp declare target // expected-note {{to match this '#pragma omp declare target'}} 37 #pragma omp threadprivate(a) // expected-note {{defined as threadprivate or thread local}} 38 extern int b; 39 int g; 40 41 struct T { 42 int a; 43 virtual int method(); 44 }; 45 46 class VC { 47 T member; 48 NonT member1; 49 public: 50 virtual int method() { T a; return 0; } 51 }; 52 53 struct C { 54 NonT a; 55 sint b; 56 int method(); 57 int method1(); 58 }; 59 60 int C::method1() { 61 return 0; 62 } 63 64 void foo() { 65 a = 0; // expected-error {{threadprivate variables cannot be used in target constructs}} 66 b = 0; // expected-note {{used here}} 67 t = 1; // expected-error {{threadprivate variables cannot be used in target constructs}} 68 C object; 69 VC object1; 70 g = object.method(); 71 g += object.method1(); 72 g += object1.method(); 73 f(); 74 c(); // expected-note {{used here}} 75 } 76 #pragma omp declare target // expected-error {{expected '#pragma omp end declare target'}} 77 void foo1() {} 78 #pragma omp end declare target 79 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 80 81 int C::method() { 82 return 0; 83 } 84 85 struct S { 86 #pragma omp declare target 87 int v; 88 #pragma omp end declare target 89 }; 90 91 int main (int argc, char **argv) { 92 #pragma omp declare target // expected-error {{unexpected OpenMP directive '#pragma omp declare target'}} 93 int v; 94 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 95 foo(); 96 return (0); 97 } 98 99 namespace { 100 #pragma omp declare target // expected-note {{to match this '#pragma omp declare target'}} 101 int x; 102 } // expected-error {{expected '#pragma omp end declare target'}} 103 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 104 105 #pragma omp declare target link(S) // expected-error {{'S' used in declare target directive is not a variable or a function name}} 106 107 #pragma omp declare target (x, x) // expected-error {{'x' appears multiple times in clauses on the same declare target directive}} 108 #pragma omp declare target to(x) to(x) // expected-error {{'x' appears multiple times in clauses on the same declare target directive}} 109 #pragma omp declare target link(x) // expected-error {{'x' must not appear in both clauses 'to' and 'link'}} 110 111 #pragma omp declare target // expected-error {{expected '#pragma omp end declare target'}} expected-note {{to match this '#pragma omp declare target'}} 112