1 // RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized 2 3 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized 4 5 int foo(); 6 7 void xxx(int argc) { 8 int x; // expected-note {{initialize the variable 'x' to silence this warning}} 9 #pragma omp critical 10 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}} 11 } 12 13 template<typename T, int N> 14 int tmain(int argc, char **argv) { // expected-note {{declared here}} 15 #pragma omp critical 16 ; 17 #pragma omp critical untied allocate(argc) // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp critical'}} expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp critical'}} 18 #pragma omp critical unknown // expected-warning {{extra tokens at the end of '#pragma omp critical' are ignored}} 19 #pragma omp critical ( // expected-error {{expected identifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} 20 #pragma omp critical ( + // expected-error {{expected identifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} 21 #pragma omp critical (name2 // expected-error {{expected ')'}} expected-note {{to match this '('}} 22 #pragma omp critical (name1) 23 foo(); 24 { 25 #pragma omp critical 26 } // expected-error {{expected statement}} 27 #pragma omp critical (name2) // expected-note {{previous 'critical' region starts here}} 28 #pragma omp critical 29 for (int i = 0; i < 10; ++i) { 30 foo(); 31 #pragma omp parallel 32 #pragma omp for 33 for (int j = 0; j < 10; j++) { 34 foo(); 35 #pragma omp critical(name2) // expected-error {{cannot nest 'critical' regions having the same name 'name2'}} 36 foo(); 37 } 38 } 39 #pragma omp critical (name2) 40 #pragma omp critical 41 for (int i = 0; i < 10; ++i) { 42 foo(); 43 #pragma omp parallel 44 #pragma omp for 45 for (int j = 0; j < 10; j++) { 46 #pragma omp critical 47 foo(); 48 } 49 } 50 #pragma omp critical (name2) 51 #pragma omp critical 52 for (int i = 0; i < 10; ++i) { 53 foo(); 54 #pragma omp parallel 55 #pragma omp for 56 for (int j = 0; j < 10; j++) { 57 #pragma omp critical (nam) 58 foo(); 59 } 60 } 61 62 #pragma omp critical (name2) hint // expected-error {{expected '(' after 'hint'}} 63 foo(); 64 #pragma omp critical (name2) hint( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 65 foo(); 66 #pragma omp critical (name2) hint(+ // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 67 foo(); 68 #pragma omp critical (name2) hint(argc) // expected-error {{integral constant expression}} expected-note 0+{{constant expression}} 69 foo(); 70 #pragma omp critical (name) hint(N) // expected-error {{argument to 'hint' clause must be a strictly positive integer value}} expected-error {{constructs with the same name must have a 'hint' clause with the same value}} expected-note {{'hint' clause with value '4'}} 71 foo(); 72 #pragma omp critical hint(N) // expected-error {{the name of the construct must be specified in presence of 'hint' clause}} 73 foo(); 74 return 0; 75 } 76 77 int main(int argc, char **argv) { // expected-note {{declared here}} 78 #pragma omp critical 79 ; 80 #pragma omp critical untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp critical'}} 81 #pragma omp critical unknown // expected-warning {{extra tokens at the end of '#pragma omp critical' are ignored}} 82 #pragma omp critical ( // expected-error {{expected identifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} 83 #pragma omp critical ( + // expected-error {{expected identifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} 84 #pragma omp critical (name2 // expected-error {{expected ')'}} expected-note {{to match this '('}} 85 #pragma omp critical (name1) 86 foo(); 87 { 88 #pragma omp critical 89 } // expected-error {{expected statement}} 90 #pragma omp critical (name2) // expected-note {{previous 'critical' region starts here}} 91 #pragma omp critical 92 for (int i = 0; i < 10; ++i) { 93 foo(); 94 #pragma omp parallel 95 #pragma omp for 96 for (int j = 0; j < 10; j++) { 97 foo(); 98 #pragma omp critical(name2) // expected-error {{cannot nest 'critical' regions having the same name 'name2'}} 99 foo(); 100 } 101 } 102 #pragma omp critical (name2) 103 #pragma omp critical 104 for (int i = 0; i < 10; ++i) { 105 foo(); 106 #pragma omp parallel 107 #pragma omp for 108 for (int j = 0; j < 10; j++) { 109 #pragma omp critical 110 foo(); 111 } 112 } 113 #pragma omp critical (name2) 114 #pragma omp critical 115 for (int i = 0; i < 10; ++i) { 116 foo(); 117 #pragma omp parallel 118 #pragma omp for 119 for (int j = 0; j < 10; j++) { 120 #pragma omp critical (nam) 121 foo(); 122 } 123 } 124 125 #pragma omp critical (name2) hint // expected-error {{expected '(' after 'hint'}} 126 foo(); 127 #pragma omp critical (name2) hint( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 128 foo(); 129 #pragma omp critical (name2) hint(+ // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 130 foo(); 131 #pragma omp critical (name2) hint(argc) // expected-error {{integral constant expression}} expected-note 0+{{constant expression}} 132 foo(); 133 #pragma omp critical (name) hint(23) // expected-note {{previous 'hint' clause with value '23'}} 134 foo(); 135 #pragma omp critical hint(-5) // expected-error {{argument to 'hint' clause must be a strictly positive integer value}} 136 foo(); 137 #pragma omp critical hint(1) // expected-error {{the name of the construct must be specified in presence of 'hint' clause}} 138 foo(); 139 return tmain<int, 4>(argc, argv) + tmain<float, -5>(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<float, -5>' requested here}} expected-note {{in instantiation of function template specialization 'tmain<int, 4>' requested here}} 140 } 141 142 int foo() { 143 L1: // expected-note {{jump exits scope of OpenMP structured block}} 144 foo(); 145 #pragma omp critical 146 { 147 foo(); 148 goto L1; // expected-error {{cannot jump from this goto statement to its label}} 149 } 150 goto L2; // expected-error {{cannot jump from this goto statement to its label}} 151 #pragma omp critical 152 { // expected-note {{jump bypasses OpenMP structured block}} 153 L2: 154 foo(); 155 } 156 157 return 0; 158 } 159