1a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized
284d0b3efSAlexey Bataev 
3a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized
4a8a9153aSAlexey Bataev 
xxx(int argc)5*c2c21ef9SAlexey Bataev void xxx(int argc) {
6*c2c21ef9SAlexey Bataev   int x; // expected-note {{initialize the variable 'x' to silence this warning}}
7*c2c21ef9SAlexey Bataev #pragma omp parallel sections
8*c2c21ef9SAlexey Bataev {
9*c2c21ef9SAlexey Bataev   argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
10*c2c21ef9SAlexey Bataev }
11*c2c21ef9SAlexey Bataev }
12*c2c21ef9SAlexey Bataev 
foo()1384d0b3efSAlexey Bataev void foo() {
1484d0b3efSAlexey Bataev }
1584d0b3efSAlexey Bataev 
1684d0b3efSAlexey Bataev #pragma omp parallel sections // expected-error {{unexpected OpenMP directive '#pragma omp parallel sections'}}
1784d0b3efSAlexey Bataev 
main(int argc,char ** argv)1884d0b3efSAlexey Bataev int main(int argc, char **argv) {
1984d0b3efSAlexey Bataev #pragma omp parallel sections {// expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
2084d0b3efSAlexey Bataev   {
2184d0b3efSAlexey Bataev     foo();
2284d0b3efSAlexey Bataev   }
2384d0b3efSAlexey Bataev #pragma omp parallel sections( // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
2484d0b3efSAlexey Bataev   {
2584d0b3efSAlexey Bataev     foo();
2684d0b3efSAlexey Bataev   }
2784d0b3efSAlexey Bataev #pragma omp parallel sections[ // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
2884d0b3efSAlexey Bataev   {
2984d0b3efSAlexey Bataev     foo();
3084d0b3efSAlexey Bataev   }
3184d0b3efSAlexey Bataev #pragma omp parallel sections] // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
3284d0b3efSAlexey Bataev   {
3384d0b3efSAlexey Bataev     foo();
3484d0b3efSAlexey Bataev   }
3584d0b3efSAlexey Bataev #pragma omp parallel sections) // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
3684d0b3efSAlexey Bataev   {
3784d0b3efSAlexey Bataev     foo();
3884d0b3efSAlexey Bataev   }
3984d0b3efSAlexey Bataev #pragma omp parallel sections } // expected-warning {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
4084d0b3efSAlexey Bataev   {
4184d0b3efSAlexey Bataev     foo();
4284d0b3efSAlexey Bataev   }
4384d0b3efSAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
4484d0b3efSAlexey Bataev #pragma omp parallel sections unknown()
4584d0b3efSAlexey Bataev   {
4684d0b3efSAlexey Bataev     foo();
4784d0b3efSAlexey Bataev #pragma omp section
4884d0b3efSAlexey Bataev   L1:
4984d0b3efSAlexey Bataev     foo();
5084d0b3efSAlexey Bataev   }
5184d0b3efSAlexey Bataev #pragma omp parallel sections
5284d0b3efSAlexey Bataev   {
5384d0b3efSAlexey Bataev     ;
5484d0b3efSAlexey Bataev   }
5584d0b3efSAlexey Bataev #pragma omp parallel sections
5684d0b3efSAlexey Bataev   {
5784d0b3efSAlexey Bataev     goto L1; // expected-error {{use of undeclared label 'L1'}}
5884d0b3efSAlexey Bataev   }
5984d0b3efSAlexey Bataev 
6084d0b3efSAlexey Bataev   for (int i = 0; i < 10; ++i) {
6184d0b3efSAlexey Bataev     switch (argc) {
6284d0b3efSAlexey Bataev     case (0):
6384d0b3efSAlexey Bataev #pragma omp parallel sections
6484d0b3efSAlexey Bataev     {
6584d0b3efSAlexey Bataev       foo();
6684d0b3efSAlexey Bataev       break;    // expected-error {{'break' statement not in loop or switch statement}}
6784d0b3efSAlexey Bataev       continue; // expected-error {{'continue' statement not in loop statement}}
6884d0b3efSAlexey Bataev     }
6984d0b3efSAlexey Bataev     default:
7084d0b3efSAlexey Bataev       break;
7184d0b3efSAlexey Bataev     }
7284d0b3efSAlexey Bataev   }
7341ebe0ceSAlexey Bataev #pragma omp parallel sections default(none) // expected-note {{explicit data sharing attribute requested here}}
7484d0b3efSAlexey Bataev   {
7584d0b3efSAlexey Bataev     ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}}
7684d0b3efSAlexey Bataev   }
7784d0b3efSAlexey Bataev 
7884d0b3efSAlexey Bataev   goto L2; // expected-error {{use of undeclared label 'L2'}}
7984d0b3efSAlexey Bataev #pragma omp parallel sections
8084d0b3efSAlexey Bataev   {
8184d0b3efSAlexey Bataev   L2:
8284d0b3efSAlexey Bataev     foo();
8384d0b3efSAlexey Bataev   }
8484d0b3efSAlexey Bataev #pragma omp parallel sections
8584d0b3efSAlexey Bataev   {
8684d0b3efSAlexey Bataev     return 1; // expected-error {{cannot return from OpenMP region}}
8784d0b3efSAlexey Bataev   }
8884d0b3efSAlexey Bataev 
8984d0b3efSAlexey Bataev   [[]] // expected-error {{an attribute list cannot appear here}}
9084d0b3efSAlexey Bataev #pragma omp parallel sections
9184d0b3efSAlexey Bataev   {
9284d0b3efSAlexey Bataev   }
9384d0b3efSAlexey Bataev 
9484d0b3efSAlexey Bataev   return 0;
9584d0b3efSAlexey Bataev }
96