143 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized2// RUN: %clang_cc1 -verify -fopenmp -std=c++98 %s -Wuninitialized3// RUN: %clang_cc1 -verify -fopenmp -std=c++11 %s -Wuninitialized4 5// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized6// RUN: %clang_cc1 -verify -fopenmp-simd -std=c++98 %s -Wuninitialized7// RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 %s -Wuninitialized8 9// expected-note@* 0+{{declared here}}10 11void foo() {12}13 14bool foobool(int argc) {15 return argc;16}17 18struct S1;19 20template <class T, typename S, int N, int ST>21T tmain(T argc, S **argv) {22#pragma omp target teams distribute simd collapse // expected-error {{expected '(' after 'collapse'}}23 for (int i = ST; i < N; i++)24 argv[0][i] = argv[0][i] - argv[0][i-ST];25 26#pragma omp target teams distribute simd collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}27 for (int i = ST; i < N; i++)28 29 argv[0][i] = argv[0][i] - argv[0][i-ST];30#pragma omp target teams distribute simd collapse () // expected-error {{expected expression}}31 for (int i = ST; i < N; i++)32 argv[0][i] = argv[0][i] - argv[0][i-ST];33 34// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}35// expected-error@+1 2 {{integral constant expression}} expected-note@+1 0+{{constant expression}}36#pragma omp target teams distribute simd collapse (argc37 for (int i = ST; i < N; i++)38 argv[0][i] = argv[0][i] - argv[0][i-ST];39 40// expected-error@+1 2 {{argument to 'collapse' clause must be a strictly positive integer value}}41#pragma omp target teams distribute simd collapse (ST // expected-error {{expected ')'}} expected-note {{to match this '('}}42 for (int i = ST; i < N; i++)43 argv[0][i] = argv[0][i] - argv[0][i-ST];44 45#pragma omp target teams distribute simd collapse (1)) // expected-warning {{extra tokens at the end of '#pragma omp target teams distribute simd' are ignored}}46 for (int i = ST; i < N; i++)47 argv[0][i] = argv[0][i] - argv[0][i-ST];48 49#pragma omp target teams distribute simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}50 for (int i = ST; i < N; i++)51 argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp target teams distribute simd', but found only 1}}52 53// expected-error@+3 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'collapse' clause}}54// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}55// expected-error@+1 2 {{integral constant expression}} expected-note@+1 0+{{constant expression}}56#pragma omp target teams distribute simd collapse (foobool(argc)), collapse (true), collapse (-5)57 for (int i = ST; i < N; i++)58 argv[0][i] = argv[0][i] - argv[0][i-ST];59 60#pragma omp distribute collapse (S) // expected-error {{'S' does not refer to a value}}61 for (int i = ST; i < N; i++)62 argv[0][i] = argv[0][i] - argv[0][i-ST];63 64#if __cplusplus <= 199711L65 // expected-error@+4 2 {{integral constant expression}} expected-note@+4 0+{{constant expression}}66#else67 // expected-error@+2 2 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}}68#endif69#pragma omp target teams distribute simd collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}70 for (int i = ST; i < N; i++)71 argv[0][i] = argv[0][i] - argv[0][i-ST];72 73#pragma omp target teams distribute simd collapse (1)74 for (int i = ST; i < N; i++)75 argv[0][i] = argv[0][i] - argv[0][i-ST];76 77#pragma omp target teams distribute simd collapse (N) // expected-error {{argument to 'collapse' clause must be a strictly positive integer value}}78 for (T i = ST; i < N; i++)79 argv[0][i] = argv[0][i] - argv[0][i-ST];80 81#pragma omp target teams distribute simd collapse (2) // expected-note {{as specified in 'collapse' clause}}82 foo(); // expected-error {{expected 2 for loops after '#pragma omp target teams distribute simd'}}83 return argc;84}85 86int main(int argc, char **argv) {87#pragma omp target teams distribute simd collapse // expected-error {{expected '(' after 'collapse'}}88 for (int i = 4; i < 12; i++)89 argv[0][i] = argv[0][i] - argv[0][i-4];90 91#pragma omp target teams distribute simd collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}92 for (int i = 4; i < 12; i++)93 argv[0][i] = argv[0][i] - argv[0][i-4];94 95#pragma omp target teams distribute simd collapse () // expected-error {{expected expression}}96 for (int i = 4; i < 12; i++)97 argv[0][i] = argv[0][i] - argv[0][i-4];98 99#pragma omp target teams distribute simd collapse (4 // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-note {{as specified in 'collapse' clause}}100 for (int i = 4; i < 12; i++)101 argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp target teams distribute simd', but found only 1}}102 103#pragma omp target teams distribute simd collapse (2+2)) // expected-warning {{extra tokens at the end of '#pragma omp target teams distribute simd' are ignored}} expected-note {{as specified in 'collapse' clause}}104 for (int i = 4; i < 12; i++)105 argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp target teams distribute simd', but found only 1}}106 107#pragma omp target teams distribute simd collapse (foobool(1) > 0 ? 1 : 2) // expected-error {{integral constant expression}} expected-note 0+{{constant expression}}108 for (int i = 4; i < 12; i++)109 argv[0][i] = argv[0][i] - argv[0][i-4];110 111// expected-error@+3 {{integral constant expression}} expected-note@+3 0+{{constant expression}}112// expected-error@+2 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'collapse' clause}}113// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}114#pragma omp target teams distribute simd collapse (foobool(argc)), collapse (true), collapse (-5)115 for (int i = 4; i < 12; i++)116 argv[0][i] = argv[0][i] - argv[0][i-4];117 118#pragma omp target teams distribute simd collapse (S1) // expected-error {{'S1' does not refer to a value}}119 for (int i = 4; i < 12; i++)120 argv[0][i] = argv[0][i] - argv[0][i-4];121 122#if __cplusplus >= 201103L123 // expected-error@+4 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}}124#else125 // expected-error@+2 {{integral constant expression}} expected-note@+2 0+{{constant expression}}126#endif127#pragma omp target teams distribute simd collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}128 for (int i = 4; i < 12; i++)129 argv[0][i] = argv[0][i] - argv[0][i-4];130 131// expected-error@+3 {{statement after '#pragma omp target teams distribute simd' must be a for loop}}132// expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, -1, -2>' requested here}}133#pragma omp target teams distribute simd collapse(collapse(tmain<int, char, -1, -2>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}}134 foo();135 136#pragma omp target teams distribute simd collapse (2) // expected-note {{as specified in 'collapse' clause}}137 foo(); // expected-error {{expected 2 for loops after '#pragma omp target teams distribute simd'}}138 139// expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, 1, 0>' requested here}}140 return tmain<int, char, 1, 0>(argc, argv);141}142 143