160e51c48SAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized
260e51c48SAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -std=c++98 %s -Wuninitialized
360e51c48SAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -std=c++11 %s -Wuninitialized
460e51c48SAlexey Bataev
560e51c48SAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
660e51c48SAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++98 %s -Wuninitialized
760e51c48SAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 %s -Wuninitialized
860e51c48SAlexey Bataev
9*ebf6fd63SRichard Smith // expected-note@* 0+{{declared here}}
10*ebf6fd63SRichard Smith
foo()1160e51c48SAlexey Bataev void foo() {
1260e51c48SAlexey Bataev }
1360e51c48SAlexey Bataev
foobool(int argc)1460e51c48SAlexey Bataev bool foobool(int argc) {
1560e51c48SAlexey Bataev return argc;
1660e51c48SAlexey Bataev }
1760e51c48SAlexey Bataev
18*ebf6fd63SRichard Smith struct S1;
1960e51c48SAlexey Bataev
20*ebf6fd63SRichard Smith template <class T, typename S, int N, int ST>
tmain(T argc,S ** argv)21*ebf6fd63SRichard Smith T tmain(T argc, S **argv) {
2260e51c48SAlexey Bataev #pragma omp master taskloop collapse // expected-error {{expected '(' after 'collapse'}}
2360e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
2460e51c48SAlexey Bataev #pragma omp master taskloop collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
2560e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
2660e51c48SAlexey Bataev #pragma omp master taskloop collapse () // expected-error {{expected expression}}
2760e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
28*ebf6fd63SRichard Smith // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
29*ebf6fd63SRichard Smith // expected-error@+1 2 {{integral constant expression}} expected-note@+1 0+{{constant expression}}
3060e51c48SAlexey Bataev #pragma omp master taskloop collapse (argc
3160e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
3260e51c48SAlexey Bataev // expected-error@+1 2 {{argument to 'collapse' clause must be a strictly positive integer value}}
3360e51c48SAlexey Bataev #pragma omp master taskloop collapse (ST // expected-error {{expected ')'}} expected-note {{to match this '('}}
3460e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
3560e51c48SAlexey Bataev #pragma omp master taskloop collapse (1)) // expected-warning {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
3660e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
3760e51c48SAlexey Bataev #pragma omp master taskloop collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
3860e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp master taskloop', but found only 1}}
39*ebf6fd63SRichard Smith // expected-error@+3 2 {{directive '#pragma omp master taskloop' cannot contain more than one 'collapse' clause}}
40*ebf6fd63SRichard Smith // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
41*ebf6fd63SRichard Smith // expected-error@+1 2 {{integral constant expression}} expected-note@+1 0+{{constant expression}}
4260e51c48SAlexey Bataev #pragma omp master taskloop collapse (foobool(argc)), collapse (true), collapse (-5)
4360e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
4460e51c48SAlexey Bataev #pragma omp master taskloop collapse (S) // expected-error {{'S' does not refer to a value}}
4560e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
4660e51c48SAlexey Bataev #if __cplusplus <= 199711L
47*ebf6fd63SRichard Smith // expected-error@+4 2 {{integral constant expression}} expected-note@+4 0+{{constant expression}}
4860e51c48SAlexey Bataev #else
4960e51c48SAlexey Bataev // expected-error@+2 2 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}}
5060e51c48SAlexey Bataev #endif
5160e51c48SAlexey Bataev #pragma omp master taskloop collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}
5260e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
5360e51c48SAlexey Bataev #pragma omp master taskloop collapse (1)
5460e51c48SAlexey Bataev for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
5560e51c48SAlexey Bataev #pragma omp master taskloop collapse (N) // expected-error {{argument to 'collapse' clause must be a strictly positive integer value}}
5660e51c48SAlexey Bataev for (T i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
5760e51c48SAlexey Bataev #pragma omp master taskloop collapse (2) // expected-note {{as specified in 'collapse' clause}}
5860e51c48SAlexey Bataev foo(); // expected-error {{expected 2 for loops after '#pragma omp master taskloop'}}
5960e51c48SAlexey Bataev return argc;
6060e51c48SAlexey Bataev }
6160e51c48SAlexey Bataev
main(int argc,char ** argv)6260e51c48SAlexey Bataev int main(int argc, char **argv) {
6360e51c48SAlexey Bataev #pragma omp master taskloop collapse // expected-error {{expected '(' after 'collapse'}}
6460e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
6560e51c48SAlexey Bataev #pragma omp master taskloop collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
6660e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
6760e51c48SAlexey Bataev #pragma omp master taskloop collapse () // expected-error {{expected expression}}
6860e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
6960e51c48SAlexey Bataev #pragma omp master taskloop collapse (4 // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-note {{as specified in 'collapse' clause}}
7060e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
7160e51c48SAlexey Bataev #pragma omp master taskloop collapse (2+2)) // expected-warning {{extra tokens at the end of '#pragma omp master taskloop' are ignored}} expected-note {{as specified in 'collapse' clause}}
7260e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
73*ebf6fd63SRichard Smith // expected-error@+1 {{integral constant expression}} expected-note@+1 0+{{constant expression}}
7460e51c48SAlexey Bataev #pragma omp master taskloop collapse (foobool(1) > 0 ? 1 : 2)
7560e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
76*ebf6fd63SRichard Smith // expected-error@+3 {{integral constant expression}} expected-note@+3 0+{{constant expression}}
7760e51c48SAlexey Bataev // expected-error@+2 2 {{directive '#pragma omp master taskloop' cannot contain more than one 'collapse' clause}}
7860e51c48SAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
7960e51c48SAlexey Bataev #pragma omp master taskloop collapse (foobool(argc)), collapse (true), collapse (-5)
8060e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
8160e51c48SAlexey Bataev #pragma omp master taskloop collapse (S1) // expected-error {{'S1' does not refer to a value}}
8260e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
8360e51c48SAlexey Bataev #if __cplusplus <= 199711L
84*ebf6fd63SRichard Smith // expected-error@+4 {{integral constant expression}} expected-note@+4 0+{{constant expression}}
8560e51c48SAlexey Bataev #else
8660e51c48SAlexey Bataev // expected-error@+2 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}}
8760e51c48SAlexey Bataev #endif
8860e51c48SAlexey Bataev #pragma omp master taskloop collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}
8960e51c48SAlexey Bataev for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
9060e51c48SAlexey Bataev // expected-error@+3 {{statement after '#pragma omp master taskloop' must be a for loop}}
9160e51c48SAlexey Bataev // expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, -1, -2>' requested here}}
9260e51c48SAlexey Bataev #pragma omp master taskloop collapse(collapse(tmain<int, char, -1, -2>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}}
9360e51c48SAlexey Bataev foo();
9460e51c48SAlexey Bataev #pragma omp master taskloop collapse (2) // expected-note {{as specified in 'collapse' clause}}
9560e51c48SAlexey Bataev foo(); // expected-error {{expected 2 for loops after '#pragma omp master taskloop'}}
9660e51c48SAlexey Bataev // expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, 1, 0>' requested here}}
9760e51c48SAlexey Bataev return tmain<int, char, 1, 0>(argc, argv);
9860e51c48SAlexey Bataev }
9960e51c48SAlexey Bataev
100