1 // RUN: %clang_cc1 -verify=expected,omp45 -fopenmp -fopenmp-version=45 -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized 2 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized 3 4 // RUN: %clang_cc1 -verify=expected,omp45 -fopenmp-simd -fopenmp-version=45 -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized 5 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized 6 7 void xxx(int argc) { 8 int x; // expected-note {{initialize the variable 'x' to silence this warning}} 9 #pragma omp parallel for 10 for(int i = 0; i < 10; ++i) 11 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}} 12 } 13 14 void foo() { 15 } 16 17 #pragma omp parallel for // expected-error {{unexpected OpenMP directive '#pragma omp parallel for'}} 18 19 int main(int argc, char **argv) { 20 #pragma omp parallel for { // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 21 for (int i = 0; i < argc; ++i) 22 foo(); 23 #pragma omp parallel for ( // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 24 for (int i = 0; i < argc; ++i) 25 foo(); 26 #pragma omp parallel for[ // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 27 for (int i = 0; i < argc; ++i) 28 foo(); 29 #pragma omp parallel for] // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 30 for (int i = 0; i < argc; ++i) 31 foo(); 32 #pragma omp parallel for) // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 33 for (int i = 0; i < argc; ++i) 34 foo(); 35 #pragma omp parallel for } // expected-warning {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 36 for (int i = 0; i < argc; ++i) 37 foo(); 38 #pragma omp parallel for 39 for (int i = 0; i < argc; ++i) 40 foo(); 41 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}} 42 #pragma omp parallel for unknown() 43 for (int i = 0; i < argc; ++i) 44 foo(); 45 L1: 46 for (int i = 0; i < argc; ++i) 47 foo(); 48 #pragma omp parallel for 49 for (int i = 0; i < argc; ++i) 50 foo(); 51 #pragma omp parallel for 52 for (int i = 0; i < argc; ++i) { 53 goto L1; // expected-error {{use of undeclared label 'L1'}} 54 argc++; 55 } 56 57 for (int i = 0; i < 10; ++i) { 58 switch (argc) { 59 case (0): 60 #pragma omp parallel for 61 for (int i = 0; i < argc; ++i) { 62 foo(); 63 break; // expected-error {{'break' statement cannot be used in OpenMP for loop}} 64 continue; 65 } 66 default: 67 break; 68 } 69 } 70 #pragma omp parallel for default(none) // expected-note {{explicit data sharing attribute requested here}} 71 for (int i = 0; i < 10; ++i) 72 ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} 73 74 goto L2; // expected-error {{use of undeclared label 'L2'}} 75 #pragma omp parallel for 76 for (int i = 0; i < argc; ++i) 77 L2: 78 foo(); 79 #pragma omp parallel for 80 for (int i = 0; i < argc; ++i) { 81 return 1; // expected-error {{cannot return from OpenMP region}} 82 } 83 84 [[]] // expected-error {{an attribute list cannot appear here}} 85 #pragma omp parallel for 86 for (int n = 0; n < 100; ++n) { 87 } 88 89 return 0; 90 } 91 92 void test_ordered() { 93 #pragma omp parallel for ordered ordered // expected-error {{directive '#pragma omp parallel for' cannot contain more than one 'ordered' clause}} 94 for (int i = 0; i < 16; ++i) 95 ; 96 #pragma omp parallel for order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for'}} expected-error {{expected '(' after 'order'}} 97 for (int i = 0; i < 10; ++i) 98 ; 99 #pragma omp parallel for order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} 100 for (int i = 0; i < 10; ++i) 101 ; 102 #pragma omp parallel for order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} 103 for (int i = 0; i < 10; ++i) 104 ; 105 #pragma omp parallel for order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for'}} expected-error {{expected ')'}} expected-note {{to match this '('}} 106 for (int i = 0; i < 10; ++i) 107 ; 108 #pragma omp parallel for order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for'}} 109 for (int i = 0; i < 10; ++i) 110 ; 111 } 112 113