1 // RUN: %clang_cc1 -verify -fopenmp -std=c++11 -ferror-limit 100 -o - %s 2 3 // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 -ferror-limit 100 -o - %s 4 5 void foo() { 6 } 7 8 bool foobool(int argc) { 9 return argc; 10 } 11 12 struct S1; // expected-note 2 {{declared here}} 13 14 template <typename T, int C> // expected-note {{declared here}} 15 T tmain(T argc) { 16 char **a; 17 #pragma omp target 18 #pragma omp teams thread_limit(C) 19 foo(); 20 #pragma omp target 21 #pragma omp teams thread_limit(T) // expected-error {{'T' does not refer to a value}} 22 foo(); 23 #pragma omp target 24 #pragma omp teams thread_limit // expected-error {{expected '(' after 'thread_limit'}} 25 foo(); 26 #pragma omp target 27 #pragma omp teams thread_limit( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 28 foo(); 29 #pragma omp target 30 #pragma omp teams thread_limit() // expected-error {{expected expression}} 31 foo(); 32 #pragma omp target 33 #pragma omp teams thread_limit(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 34 foo(); 35 #pragma omp target 36 #pragma omp teams thread_limit(argc)) // expected-warning {{extra tokens at the end of '#pragma omp teams' are ignored}} 37 foo(); 38 #pragma omp target 39 #pragma omp teams thread_limit(argc > 0 ? a[1] : a[2]) // expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} 40 foo(); 41 #pragma omp target 42 #pragma omp teams thread_limit(argc + argc) 43 foo(); 44 #pragma omp target 45 #pragma omp teams thread_limit(argc), thread_limit (argc+1) // expected-error {{directive '#pragma omp teams' cannot contain more than one 'thread_limit' clause}} 46 foo(); 47 #pragma omp target 48 #pragma omp teams thread_limit(S1) // expected-error {{'S1' does not refer to a value}} 49 foo(); 50 #pragma omp target 51 #pragma omp teams thread_limit(-2) // expected-error {{argument to 'thread_limit' clause must be a strictly positive integer value}} 52 foo(); 53 #pragma omp target 54 #pragma omp teams thread_limit(-10u) 55 foo(); 56 #pragma omp target 57 #pragma omp teams thread_limit(3.14) // expected-error 2 {{expression must have integral or unscoped enumeration type, not 'double'}} 58 foo(); 59 60 return 0; 61 } 62 63 int main(int argc, char **argv) { 64 #pragma omp target 65 #pragma omp teams thread_limit // expected-error {{expected '(' after 'thread_limit'}} 66 foo(); 67 68 #pragma omp target 69 #pragma omp teams thread_limit ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 70 foo(); 71 72 #pragma omp target 73 #pragma omp teams thread_limit () // expected-error {{expected expression}} 74 foo(); 75 76 #pragma omp target 77 #pragma omp teams thread_limit (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 78 foo(); 79 80 #pragma omp target 81 #pragma omp teams thread_limit (argc)) // expected-warning {{extra tokens at the end of '#pragma omp teams' are ignored}} 82 foo(); 83 84 #pragma omp target 85 #pragma omp teams thread_limit (argc > 0 ? argv[1] : argv[2]) // expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} 86 foo(); 87 88 #pragma omp target 89 #pragma omp teams thread_limit (argc + argc) 90 foo(); 91 92 #pragma omp target 93 #pragma omp teams thread_limit (argc), thread_limit (argc+1) // expected-error {{directive '#pragma omp teams' cannot contain more than one 'thread_limit' clause}} 94 foo(); 95 96 #pragma omp target 97 #pragma omp teams thread_limit (S1) // expected-error {{'S1' does not refer to a value}} 98 foo(); 99 100 #pragma omp target 101 #pragma omp teams thread_limit (-2) // expected-error {{argument to 'thread_limit' clause must be a strictly positive integer value}} 102 foo(); 103 104 #pragma omp target 105 #pragma omp teams thread_limit (-10u) 106 foo(); 107 108 #pragma omp target 109 #pragma omp teams thread_limit (3.14) // expected-error {{expression must have integral or unscoped enumeration type, not 'double'}} 110 foo(); 111 112 return tmain<int, 10>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 10>' requested here}} 113 } 114