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; 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(); 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 template <typename T> 37 T bla1() { return 0; } 38 39 #pragma omp declare target 40 template <typename T> 41 T bla2() { return 0; } 42 #pragma omp end declare target 43 44 template<> 45 float bla2() { return 1.0; } 46 47 #pragma omp declare target 48 void blub2() { 49 bla2<float>(); 50 bla2<int>(); 51 } 52 #pragma omp end declare target 53 54 void t2() { 55 #pragma omp target 56 { 57 bla2<float>(); 58 bla2<long>(); 59 } 60 } 61 62 #pragma omp declare target 63 void abc(); 64 #pragma omp end declare target 65 void cba(); 66 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 67 68 #pragma omp declare target 69 #pragma omp declare target 70 void def(); 71 #pragma omp end declare target 72 void fed(); 73 74 #pragma omp declare target 75 #pragma omp threadprivate(a) // expected-note {{defined as threadprivate or thread local}} 76 extern int b; 77 int g; 78 79 struct T { 80 int a; 81 virtual int method(); 82 }; 83 84 class VC { 85 T member; 86 NonT member1; 87 public: 88 virtual int method() { T a; return 0; } 89 }; 90 91 struct C { 92 NonT a; 93 sint b; 94 int method(); 95 int method1(); 96 }; 97 98 int C::method1() { 99 return 0; 100 } 101 102 void foo(int p) { 103 a = 0; // expected-error {{threadprivate variables cannot be used in target constructs}} 104 b = 0; 105 t = 1; // expected-error {{threadprivate variables cannot be used in target constructs}} 106 C object; 107 VC object1; 108 g = object.method(); 109 g += object.method1(); 110 g += object1.method() + p; 111 f(); 112 c(); 113 } 114 #pragma omp declare target 115 void foo1() {} 116 #pragma omp end declare target 117 118 #pragma omp end declare target 119 #pragma omp end declare target 120 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 121 122 int C::method() { 123 return 0; 124 } 125 126 struct S { 127 #pragma omp declare target 128 int v; 129 #pragma omp end declare target 130 }; 131 132 int main (int argc, char **argv) { 133 #pragma omp declare target // expected-error {{unexpected OpenMP directive '#pragma omp declare target'}} 134 int v; 135 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 136 foo(v); 137 return (0); 138 } 139 140 namespace { 141 #pragma omp declare target // expected-note {{to match this '#pragma omp declare target'}} 142 int x; 143 } // expected-error {{expected '#pragma omp end declare target'}} 144 #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} 145 146 #pragma omp declare target link(S) // expected-error {{'S' used in declare target directive is not a variable or a function name}} 147 148 #pragma omp declare target (x, x) // expected-error {{'x' appears multiple times in clauses on the same declare target directive}} 149 #pragma omp declare target to(x) to(x) // expected-error {{'x' appears multiple times in clauses on the same declare target directive}} 150 #pragma omp declare target link(x) // expected-error {{'x' must not appear in both clauses 'to' and 'link'}} 151 152 #pragma omp declare target // expected-error {{expected '#pragma omp end declare target'}} expected-note {{to match this '#pragma omp declare target'}} 153