1 // RUN: %clang_cc1 -verify -fsyntax-only -fopenmp -fopenmp-version=51 -std=c++11 %s -Wuninitialized 2 // RUN: %clang_cc1 -verify -fsyntax-only -fopenmp-simd -fopenmp-version=51 -std=c++11 %s -Wuninitialized 3 4 void foo() { 5 } 6 7 bool foobool(int argc) { 8 return argc; 9 } 10 11 struct S1; // expected-note 2 {{declared here}} 12 13 template <typename T, int C> // expected-note {{declared here}} 14 T tmain(T argc) { 15 char **a; 16 T k; 17 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(C)))]] 18 for (int i=0; i<100; i++) foo(); 19 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(T)))]] // expected-error {{'T' does not refer to a value}} 20 for (int i=0; i<100; i++) foo(); 21 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams))]] // expected-error {{expected '(' after 'num_teams'}} 22 for (int i=0; i<100; i++) foo(); 23 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams()))]] // expected-error {{expected expression}} 24 for (int i=0; i<100; i++) foo(); 25 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(argc > 0 ? a[1] : a[2])))]] // expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} 26 for (int i=0; i<100; i++) foo(); 27 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(argc + k)))]] 28 for (int i=0; i<100; i++) foo(); 29 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(argc), num_teams (argc+1)))]] // expected-error {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'num_teams' clause}} 30 for (int i=0; i<100; i++) foo(); 31 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(S1)))]] // expected-error {{'S1' does not refer to a value}} 32 for (int i=0; i<100; i++) foo(); 33 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(-2)))]] // expected-error {{argument to 'num_teams' clause must be a strictly positive integer value}} 34 for (int i=0; i<100; i++) foo(); 35 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(-10u)))]] 36 for (int i=0; i<100; i++) foo(); 37 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams(3.14)))]] // expected-error 2 {{expression must have integral or unscoped enumeration type, not 'double'}} 38 for (int i=0; i<100; i++) foo(); 39 40 return 0; 41 } 42 43 int main(int argc, char **argv) { 44 int k; 45 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams))]] // expected-error {{expected '(' after 'num_teams'}} 46 for (int i=0; i<100; i++) foo(); 47 48 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams ()))]] // expected-error {{expected expression}} 49 for (int i=0; i<100; i++) foo(); 50 51 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (argc > 0 ? argv[1] : argv[2])))]] // expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} 52 for (int i=0; i<100; i++) foo(); 53 54 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (argc + k)))]] 55 for (int i=0; i<100; i++) foo(); 56 57 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (argc), num_teams (argc+1)))]] // expected-error {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'num_teams' clause}} 58 for (int i=0; i<100; i++) foo(); 59 60 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (S1)))]] // expected-error {{'S1' does not refer to a value}} 61 for (int i=0; i<100; i++) foo(); 62 63 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (-2)))]] // expected-error {{argument to 'num_teams' clause must be a strictly positive integer value}} 64 for (int i=0; i<100; i++) foo(); 65 66 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (-10u)))]] 67 for (int i=0; i<100; i++) foo(); 68 69 [[omp::sequence(directive(target), directive(teams distribute parallel for simd num_teams (3.14)))]] // expected-error {{expression must have integral or unscoped enumeration type, not 'double'}} 70 for (int i=0; i<100; i++) foo(); 71 72 return tmain<int, 10>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 10>' requested here}} 73 } 74