166 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 target23#pragma omp teams distribute simd collapse // expected-error {{expected '(' after 'collapse'}}24 for (int i = ST; i < N; i++)25 argv[0][i] = argv[0][i] - argv[0][i-ST];26 27#pragma omp target28#pragma omp teams distribute simd collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}29 for (int i = ST; i < N; i++)30 31 argv[0][i] = argv[0][i] - argv[0][i-ST];32#pragma omp target33#pragma omp teams distribute simd collapse () // expected-error {{expected expression}}34 for (int i = ST; i < N; i++)35 argv[0][i] = argv[0][i] - argv[0][i-ST];36 37// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}38// expected-error@+2 2 {{integral constant expression}} expected-note@+2 0+{{constant expression}}39#pragma omp target40#pragma omp teams distribute simd collapse (argc 41 for (int i = ST; i < N; i++)42 argv[0][i] = argv[0][i] - argv[0][i-ST];43 44// expected-error@+2 2 {{argument to 'collapse' clause must be a strictly positive integer value}}45#pragma omp target46#pragma omp teams distribute simd collapse (ST // expected-error {{expected ')'}} expected-note {{to match this '('}}47 for (int i = ST; i < N; i++)48 argv[0][i] = argv[0][i] - argv[0][i-ST];49 50#pragma omp target51#pragma omp teams distribute simd collapse (1)) // expected-warning {{extra tokens at the end of '#pragma omp teams distribute simd' are ignored}}52 for (int i = ST; i < N; i++)53 argv[0][i] = argv[0][i] - argv[0][i-ST];54 55#pragma omp target56#pragma omp teams distribute simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}57 for (int i = ST; i < N; i++)58 argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp teams distribute simd', but found only 1}}59 60// expected-error@+4 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'collapse' clause}}61// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}62// expected-error@+2 2 {{integral constant expression}} expected-note@+2 0+{{constant expression}}63#pragma omp target64#pragma omp teams distribute simd collapse (foobool(argc)), collapse (true), collapse (-5)65 for (int i = ST; i < N; i++)66 argv[0][i] = argv[0][i] - argv[0][i-ST];67 68#pragma omp distribute collapse (S) // expected-error {{'S' does not refer to a value}}69 for (int i = ST; i < N; i++)70 argv[0][i] = argv[0][i] - argv[0][i-ST];71 72#if __cplusplus <= 199711L73 // expected-error@+5 2 {{integral constant expression}} expected-note@+5 0+{{constant expression}}74#else75 // expected-error@+3 2 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}}76#endif77#pragma omp target78#pragma omp teams distribute simd collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}79 for (int i = ST; i < N; i++)80 argv[0][i] = argv[0][i] - argv[0][i-ST];81 82#pragma omp target83#pragma omp teams distribute simd collapse (1)84 for (int i = ST; i < N; i++)85 argv[0][i] = argv[0][i] - argv[0][i-ST];86 87#pragma omp target88#pragma omp teams distribute simd collapse (N) // expected-error {{argument to 'collapse' clause must be a strictly positive integer value}}89 for (T i = ST; i < N; i++)90 argv[0][i] = argv[0][i] - argv[0][i-ST];91 92#pragma omp target93#pragma omp teams distribute simd collapse (2) // expected-note {{as specified in 'collapse' clause}}94 foo(); // expected-error {{expected 2 for loops after '#pragma omp teams distribute simd'}}95 return argc;96}97 98int main(int argc, char **argv) {99#pragma omp target100#pragma omp teams distribute simd collapse // expected-error {{expected '(' after 'collapse'}}101 for (int i = 4; i < 12; i++)102 argv[0][i] = argv[0][i] - argv[0][i-4];103 104#pragma omp target105#pragma omp teams distribute simd collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}106 for (int i = 4; i < 12; i++)107 argv[0][i] = argv[0][i] - argv[0][i-4];108 109#pragma omp target110#pragma omp teams distribute simd collapse () // expected-error {{expected expression}}111 for (int i = 4; i < 12; i++)112 argv[0][i] = argv[0][i] - argv[0][i-4];113 114#pragma omp target115#pragma omp teams distribute simd collapse (4 // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-note {{as specified in 'collapse' clause}}116 for (int i = 4; i < 12; i++)117 argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp teams distribute simd', but found only 1}}118 119#pragma omp target120#pragma omp teams distribute simd collapse (2+2)) // expected-warning {{extra tokens at the end of '#pragma omp teams distribute simd' are ignored}} expected-note {{as specified in 'collapse' clause}}121 for (int i = 4; i < 12; i++)122 argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp teams distribute simd', but found only 1}}123 124#pragma omp target125#pragma omp teams distribute simd collapse (foobool(1) > 0 ? 1 : 2) // expected-error {{integral constant expression}} expected-note 0+{{constant expression}}126 for (int i = 4; i < 12; i++)127 argv[0][i] = argv[0][i] - argv[0][i-4];128 129// expected-error@+4 {{integral constant expression}} expected-note@+4 0+{{constant expression}}130// expected-error@+3 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'collapse' clause}}131// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}132#pragma omp target133#pragma omp teams distribute simd collapse (foobool(argc)), collapse (true), collapse (-5) 134 for (int i = 4; i < 12; i++)135 argv[0][i] = argv[0][i] - argv[0][i-4];136 137#pragma omp target138#pragma omp teams distribute simd collapse (S1) // expected-error {{'S1' does not refer to a value}}139 for (int i = 4; i < 12; i++)140 argv[0][i] = argv[0][i] - argv[0][i-4];141 142#if __cplusplus >= 201103L143 // expected-error@+5 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}}144#else145 // expected-error@+3 {{integral constant expression}} expected-note@+3 0+{{constant expression}}146#endif147#pragma omp target148#pragma omp teams distribute simd collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}149 for (int i = 4; i < 12; i++)150 argv[0][i] = argv[0][i] - argv[0][i-4];151 152// expected-error@+4 {{statement after '#pragma omp teams distribute simd' must be a for loop}}153// expected-note@+2 {{in instantiation of function template specialization 'tmain<int, char, -1, -2>' requested here}}154#pragma omp target155#pragma omp teams distribute simd collapse(collapse(tmain<int, char, -1, -2>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}}156 foo();157 158#pragma omp target159#pragma omp teams distribute simd collapse (2) // expected-note {{as specified in 'collapse' clause}}160 foo(); // expected-error {{expected 2 for loops after '#pragma omp teams distribute simd'}}161 162// expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, 1, 0>' requested here}}163 return tmain<int, char, 1, 0>(argc, argv);164}165 166