1 /* PR 7543. Test operation of -Wparentheses. Precedence warnings. 2 !a | b and !a & b. */ 3 /* { dg-do compile } */ 4 /* { dg-options "-Wparentheses" } */ 5 6 int foo (int); 7 8 int bar(int a,int b,int c)9bar (int a, int b, int c) 10 { 11 foo (!a & b); /* { dg-warning "parentheses" "correct warning" } */ 12 foo (!a & (b < c)); 13 foo (!a & (b > c)); 14 foo (!a & (b == c)); 15 foo (!a & (b != c)); 16 foo (!a & (b <= c)); 17 foo (!a & (b >= c)); 18 foo (!a & (b && c)); 19 foo (!a & (b || c)); 20 foo (!a & !b); 21 foo (!(a & b)); 22 foo ((!a) & b); 23 foo (!a & 2); /* { dg-warning "parentheses" "correct warning" } */ 24 foo (!a & (2 < c)); 25 foo (!a & (2 > c)); 26 foo (!a & (2 == c)); 27 foo (!a & (2 != c)); 28 foo (!a & (2 <= c)); 29 foo (!a & (2 >= c)); 30 foo (!a & (2 && c)); 31 foo (!a & (2 || c)); 32 foo (!a & !2); 33 foo (!(a & 2)); 34 foo ((!a) & 2); 35 foo (!1 & 2); /* { dg-warning "parentheses" "correct warning" } */ 36 foo (!1 & (2 < c)); 37 foo (!1 & (2 > c)); 38 foo (!1 & (2 == c)); 39 foo (!1 & (2 != c)); 40 foo (!1 & (2 <= c)); 41 foo (!1 & (2 >= c)); 42 foo (!1 & (2 && c)); 43 foo (!1 & (2 || c)); 44 foo (!1 & !2); 45 foo (!(1 & 2)); 46 47 foo (!a | b); /* { dg-warning "parentheses" "correct warning" } */ 48 foo (!a | (b < c)); 49 foo (!a | (b > c)); 50 foo (!a | (b == c)); 51 foo (!a | (b != c)); 52 foo (!a | (b <= c)); 53 foo (!a | (b >= c)); 54 foo (!a | (b && c)); 55 foo (!a | (b || c)); 56 foo (!a | !b); 57 foo (!(a | b)); 58 foo ((!a) | b); 59 foo (!a | 2); /* { dg-warning "parentheses" "correct warning" } */ 60 foo (!a | (2 < c)); 61 foo (!a | (2 > c)); 62 foo (!a | (2 == c)); 63 foo (!a | (2 != c)); 64 foo (!a | (2 <= c)); 65 foo (!a | (2 >= c)); 66 foo (!a | (2 && c)); 67 foo (!a | (2 || c)); 68 foo (!a | !2); 69 foo (!(a | 2)); 70 foo ((!a) | 2); 71 foo (!1 | 2); /* { dg-warning "parentheses" "correct warning" } */ 72 foo (!1 | (2 < c)); 73 foo (!1 | (2 > c)); 74 foo (!1 | (2 == c)); 75 foo (!1 | (2 != c)); 76 foo (!1 | (2 <= c)); 77 foo (!1 | (2 >= c)); 78 foo (!1 | (2 && c)); 79 foo (!1 | (2 || c)); 80 foo (!1 | !2); 81 foo (!(1 | 2)); 82 foo ((!1) | 2); 83 84 foo (b & !a); /* { dg-bogus "parentheses" "bogus warning" } */ 85 foo ((b < c) & !a); 86 foo ((b > c) & !a); 87 foo ((b == c) & !a); 88 foo ((b != c) & !a); 89 foo ((b <= c) & !a); 90 foo ((b >= c) & !a); 91 foo ((b && c) & !a); 92 foo ((b || c) & !a); 93 foo (!b & !a); 94 foo (!(b & a)); 95 foo (b & (!a)); 96 foo (2 & !a); /* { dg-bogus "parentheses" "correct warning" } */ 97 foo ((2 < c) & !a); 98 foo ((2 > c) & !a); 99 foo ((2 == c) & !a); 100 foo ((2 != c) & !a); 101 foo ((2 <= c) & !a); 102 foo ((2 >= c) & !a); 103 foo ((2 && c) & !a); 104 foo ((2 || c) & !a); 105 foo (!2 & !a); 106 foo (!(2 & a)); 107 foo (2 & (!a)); 108 foo (2 & !1); /* { dg-bogus "parentheses" "correct warning" } */ 109 foo ((2 < c) & !1); 110 foo ((2 > c) & !1); 111 foo ((2 == c) & !1); 112 foo ((2 != c) & !1); 113 foo ((2 <= c) & !1); 114 foo ((2 >= c) & !1); 115 foo ((2 && c) & !1); 116 foo ((2 || c) & !1); 117 foo (!2 & !1); 118 foo (!(2 & 1)); 119 120 foo (b | !a); /* { dg-bogus "parentheses" "correct warning" } */ 121 foo ((b < c) | !a); 122 foo ((b > c) | !a); 123 foo ((b == c) | !a); 124 foo ((b != c) | !a); 125 foo ((b <= c) | !a); 126 foo ((b >= c) | !a); 127 foo ((b && c) | !a); 128 foo ((b || c) | !a); 129 foo (!b | !a); 130 foo (!(b | a)); 131 foo (b | (!a)); 132 foo (2 | !a); /* { dg-bogus "parentheses" "correct warning" } */ 133 foo ((2 < c) | !a); 134 foo ((2 > c) | !a); 135 foo ((2 == c) | !a); 136 foo ((2 != c) | !a); 137 foo ((2 <= c) | !a); 138 foo ((2 >= c) | !a); 139 foo ((2 && c) | !a); 140 foo ((2 || c) | !a); 141 foo (!2 | !a); 142 foo (!(2 | a)); 143 foo (2 | (!a)); 144 foo (2 | !1); /* { dg-bogus "parentheses" "correct warning" } */ 145 foo ((2 < c) | !1); 146 foo ((2 > c) | !1); 147 foo ((2 == c) | !1); 148 foo ((2 != c) | !1); 149 foo ((2 <= c) | !1); 150 foo ((2 >= c) | !1); 151 foo ((2 && c) | !1); 152 foo ((2 || c) | !1); 153 foo (!2 | !1); 154 foo (!(2 | 1)); 155 foo (2 | (!1)); 156 } 157 158 int baz(int a,int b,int c)159baz (int a, int b, int c) 160 { 161 foo (!a & (b << c));/* { dg-warning "parentheses" "correct warning" } */ 162 foo (!a & (b >> c));/* { dg-warning "parentheses" "correct warning" } */ 163 foo (!a & (b + c)); /* { dg-warning "parentheses" "correct warning" } */ 164 foo (!a & (b - c)); /* { dg-warning "parentheses" "correct warning" } */ 165 foo (!a & (b = c)); /* { dg-warning "parentheses" "correct warning" } */ 166 foo (!a & ~b); /* { dg-warning "parentheses" "correct warning" } */ 167 foo (!a & (b & c)); /* { dg-warning "parentheses" "correct warning" } */ 168 foo (!a & (b | c)); /* { dg-warning "parentheses" "correct warning" } */ 169 foo (!a & 2); /* { dg-warning "parentheses" "correct warning" } */ 170 foo (!a & (2 << c));/* { dg-warning "parentheses" "correct warning" } */ 171 foo (!a & (2 >> c));/* { dg-warning "parentheses" "correct warning" } */ 172 foo (!a & (2 + c)); /* { dg-warning "parentheses" "correct warning" } */ 173 foo (!a & (2 - c)); /* { dg-warning "parentheses" "correct warning" } */ 174 foo (!a & (c = 2)); /* { dg-warning "parentheses" "correct warning" } */ 175 foo (!a & ~2); /* { dg-warning "parentheses" "correct warning" } */ 176 foo (!a & (2 & c)); /* { dg-warning "parentheses" "correct warning" } */ 177 foo (!a & (2 | c)); /* { dg-warning "parentheses" "correct warning" } */ 178 foo (!1 & (2 << c));/* { dg-warning "parentheses" "correct warning" } */ 179 foo (!1 & (2 >> c));/* { dg-warning "parentheses" "correct warning" } */ 180 foo (!1 & (2 + c)); /* { dg-warning "parentheses" "correct warning" } */ 181 foo (!1 & (2 - c)); /* { dg-warning "parentheses" "correct warning" } */ 182 foo (!1 & (c = 2)); /* { dg-warning "parentheses" "correct warning" } */ 183 foo (!1 & ~2); /* { dg-warning "parentheses" "correct warning" } */ 184 foo (!1 & (2 & c)); /* { dg-warning "parentheses" "correct warning" } */ 185 foo (!1 & (2 | c)); /* { dg-warning "parentheses" "correct warning" } */ 186 foo (!a | (b << c));/* { dg-warning "parentheses" "correct warning" } */ 187 foo (!a | (b >> c));/* { dg-warning "parentheses" "correct warning" } */ 188 foo (!a | (b + c)); /* { dg-warning "parentheses" "correct warning" } */ 189 foo (!a | (b - c)); /* { dg-warning "parentheses" "correct warning" } */ 190 foo (!a | (b = c)); /* { dg-warning "parentheses" "correct warning" } */ 191 foo (!a | ~b); /* { dg-warning "parentheses" "correct warning" } */ 192 foo (!a | (b & c)); /* { dg-warning "parentheses" "correct warning" } */ 193 foo (!a | (b | c)); /* { dg-warning "parentheses" "correct warning" } */ 194 foo (!a | (2 << c));/* { dg-warning "parentheses" "correct warning" } */ 195 foo (!a | (2 >> c));/* { dg-warning "parentheses" "correct warning" } */ 196 foo (!a | (2 + c)); /* { dg-warning "parentheses" "correct warning" } */ 197 foo (!a | (2 - c)); /* { dg-warning "parentheses" "correct warning" } */ 198 foo (!a | (c = 2)); /* { dg-warning "parentheses" "correct warning" } */ 199 foo (!a | ~2); /* { dg-warning "parentheses" "correct warning" } */ 200 foo (!a | (2 & c)); /* { dg-warning "parentheses" "correct warning" } */ 201 foo (!a | (2 | c)); /* { dg-warning "parentheses" "correct warning" } */ 202 foo (!1 | (2 << c));/* { dg-warning "parentheses" "correct warning" } */ 203 foo (!1 | (2 >> c));/* { dg-warning "parentheses" "correct warning" } */ 204 foo (!1 | (2 + c)); /* { dg-warning "parentheses" "correct warning" } */ 205 foo (!1 | (2 - c)); /* { dg-warning "parentheses" "correct warning" } */ 206 foo (!1 | (c = 2)); /* { dg-warning "parentheses" "correct warning" } */ 207 foo (!1 | ~2); /* { dg-warning "parentheses" "correct warning" } */ 208 foo (!1 | (2 & c)); /* { dg-warning "parentheses" "correct warning" } */ 209 foo (!1 | (2 | c)); /* { dg-warning "parentheses" "correct warning" } */ 210 foo ((b << c) & !a); 211 foo ((b >> c) & !a); 212 foo ((b + c) & !a); 213 foo ((b - c) & !a); 214 foo ((b = c) & !a); 215 foo (~b & !a); 216 foo ((b & c) & !a); 217 foo ((b | c) & !a); 218 foo ((2 << c) & !a); 219 foo ((2 >> c) & !a); 220 foo ((2 + c) & !a); 221 foo ((2 - c) & !a); 222 foo ((c = 2) & !a); 223 foo (~2 & !a); 224 foo ((2 & c) & !a); 225 foo ((2 | c) & !a); 226 foo ((2 << c) & !1); 227 foo ((2 >> c) & !1); 228 foo ((2 + c) & !1); 229 foo ((2 - c) & !1); 230 foo ((c = 2) & !1); 231 foo (~2 & !1); 232 foo ((2 & c) & !1); 233 foo ((2 | c) & !1); 234 foo ((b << c) | !a); 235 foo ((b >> c) | !a); 236 foo ((b + c) | !a); 237 foo ((b - c) | !a); 238 foo ((b = c) | !a); 239 foo (~b | !a); 240 foo ((b & c) | !a); 241 foo ((b | c) | !a); 242 foo ((2 << c) | !a); 243 foo ((2 >> c) | !a); 244 foo ((2 + c) | !a); 245 foo ((2 - c) | !a); 246 foo ((c = 2) | !a); 247 foo (~2 | !a); 248 foo ((2 & c) | !a); 249 foo ((2 | c) | !a); 250 foo ((2 << c) | !1); 251 foo ((2 >> c) | !1); 252 foo ((2 + c) | !1); 253 foo ((2 - c) | !1); 254 foo ((c = 2) | !1); 255 foo (~2 | !1); 256 foo ((2 & c) | !1); 257 foo ((2 | c) | !1); 258 } 259