1 1.5 rillig /* $NetBSD: msg_193.c,v 1.5 2021/03/21 15:24:56 rillig Exp $ */ 2 1.1 rillig # 3 "msg_193.c" 3 1.1 rillig 4 1.1 rillig // Test for message: statement not reached [193] 5 1.1 rillig 6 1.3 rillig /* 7 1.3 rillig * Test the reachability of statements in a function. 8 1.3 rillig * 9 1.3 rillig * if 10 1.3 rillig * if-else 11 1.3 rillig * if-else-if-else 12 1.3 rillig * for 13 1.3 rillig * while 14 1.3 rillig * do-while 15 1.3 rillig * switch 16 1.3 rillig * break 17 1.3 rillig * continue 18 1.3 rillig * goto 19 1.3 rillig * return 20 1.3 rillig * 21 1.3 rillig * constant expression 22 1.3 rillig * system-dependent constant expression 23 1.3 rillig */ 24 1.3 rillig 25 1.3 rillig extern void 26 1.3 rillig reachable(void); 27 1.3 rillig extern void 28 1.3 rillig unreachable(void); 29 1.3 rillig 30 1.3 rillig void 31 1.3 rillig test_statement(void) 32 1.3 rillig { 33 1.3 rillig reachable(); 34 1.3 rillig reachable(); 35 1.3 rillig } 36 1.3 rillig 37 1.3 rillig void 38 1.3 rillig test_compound_statement(void) 39 1.3 rillig { 40 1.3 rillig reachable(); 41 1.3 rillig { 42 1.3 rillig reachable(); 43 1.3 rillig reachable(); 44 1.3 rillig } 45 1.3 rillig reachable(); 46 1.3 rillig } 47 1.3 rillig 48 1.3 rillig void 49 1.3 rillig test_if_statement(void) 50 1.3 rillig { 51 1.3 rillig if (1) 52 1.3 rillig reachable(); 53 1.3 rillig reachable(); 54 1.3 rillig if (0) 55 1.4 rillig unreachable(); /* expect: 193 */ 56 1.3 rillig reachable(); 57 1.3 rillig } 58 1.3 rillig 59 1.3 rillig void 60 1.3 rillig test_if_compound_statement(void) 61 1.3 rillig { 62 1.3 rillig if (1) { 63 1.3 rillig reachable(); 64 1.3 rillig } 65 1.3 rillig if (1) { 66 1.3 rillig { 67 1.3 rillig { 68 1.3 rillig reachable(); 69 1.3 rillig } 70 1.3 rillig } 71 1.3 rillig } 72 1.3 rillig 73 1.3 rillig if (0) { 74 1.4 rillig unreachable(); /* expect: 193 */ 75 1.3 rillig } 76 1.3 rillig if (0) { 77 1.3 rillig { 78 1.3 rillig { 79 1.4 rillig unreachable(); /* expect: 193 */ 80 1.3 rillig } 81 1.3 rillig } 82 1.3 rillig } 83 1.3 rillig } 84 1.3 rillig 85 1.3 rillig void 86 1.3 rillig test_if_without_else(void) 87 1.3 rillig { 88 1.3 rillig if (1) 89 1.3 rillig reachable(); 90 1.3 rillig reachable(); 91 1.3 rillig 92 1.3 rillig if (0) 93 1.4 rillig unreachable(); /* expect: 193 */ 94 1.3 rillig reachable(); 95 1.3 rillig } 96 1.3 rillig 97 1.3 rillig void 98 1.3 rillig test_if_with_else(void) 99 1.3 rillig { 100 1.3 rillig if (1) 101 1.3 rillig reachable(); 102 1.3 rillig else 103 1.4 rillig unreachable(); /* expect: 193 */ 104 1.3 rillig reachable(); 105 1.3 rillig 106 1.3 rillig if (0) 107 1.4 rillig unreachable(); /* expect: 193 */ 108 1.3 rillig else 109 1.3 rillig reachable(); 110 1.3 rillig reachable(); 111 1.3 rillig } 112 1.3 rillig 113 1.3 rillig void 114 1.3 rillig test_if_else_if_else(void) 115 1.3 rillig { 116 1.3 rillig if (1) 117 1.3 rillig reachable(); 118 1.4 rillig else if (1) /* expect: 193 */ 119 1.4 rillig unreachable(); 120 1.3 rillig else 121 1.4 rillig unreachable(); /* expect: 193 */ 122 1.3 rillig 123 1.3 rillig if (0) 124 1.4 rillig unreachable(); /* expect: 193 */ 125 1.3 rillig else if (1) 126 1.3 rillig reachable(); 127 1.3 rillig else 128 1.4 rillig unreachable(); /* expect: 193 */ 129 1.3 rillig 130 1.3 rillig if (0) 131 1.4 rillig unreachable(); /* expect: 193 */ 132 1.3 rillig else if (0) 133 1.4 rillig unreachable(); /* expect: 193 */ 134 1.3 rillig else 135 1.3 rillig reachable(); 136 1.3 rillig } 137 1.3 rillig 138 1.3 rillig void 139 1.3 rillig test_if_return(void) 140 1.3 rillig { 141 1.3 rillig if (1) 142 1.3 rillig return; 143 1.5 rillig unreachable(); /* expect: 193 */ 144 1.3 rillig } 145 1.3 rillig 146 1.3 rillig void 147 1.3 rillig test_if_else_return(void) 148 1.3 rillig { 149 1.3 rillig if (1) 150 1.3 rillig reachable(); 151 1.3 rillig else 152 1.4 rillig return; /* expect: 193 */ 153 1.3 rillig reachable(); 154 1.3 rillig } 155 1.3 rillig 156 1.3 rillig void 157 1.3 rillig test_for_forever(void) 158 1.3 rillig { 159 1.3 rillig for (;;) 160 1.3 rillig reachable(); 161 1.3 rillig unreachable(); /* expect: 193 */ 162 1.3 rillig } 163 1.3 rillig 164 1.3 rillig void 165 1.3 rillig test_for_true(void) 166 1.3 rillig { 167 1.3 rillig for (; 1;) 168 1.3 rillig reachable(); 169 1.3 rillig unreachable(); /* expect: 193 */ 170 1.3 rillig } 171 1.3 rillig 172 1.3 rillig void 173 1.3 rillig test_for_false(void) 174 1.3 rillig { 175 1.3 rillig for (; 0;) 176 1.3 rillig unreachable(); /* TODO: expect: 193 */ 177 1.3 rillig reachable(); 178 1.3 rillig } 179 1.3 rillig 180 1.3 rillig void 181 1.3 rillig test_for_break(void) 182 1.3 rillig { 183 1.3 rillig for (;;) { 184 1.3 rillig reachable(); 185 1.3 rillig break; 186 1.3 rillig unreachable(); /* expect: 193 */ 187 1.3 rillig } 188 1.3 rillig reachable(); 189 1.3 rillig } 190 1.3 rillig 191 1.3 rillig void 192 1.3 rillig test_for_if_break(void) 193 1.3 rillig { 194 1.3 rillig for (;;) { 195 1.3 rillig reachable(); 196 1.3 rillig if (0) { 197 1.4 rillig unreachable(); /* expect: 193 */ 198 1.3 rillig break; 199 1.3 rillig unreachable(); /* expect: 193 */ 200 1.3 rillig } 201 1.3 rillig if (1) { 202 1.3 rillig reachable(); 203 1.3 rillig break; 204 1.3 rillig unreachable(); /* expect: 193 */ 205 1.3 rillig } 206 1.3 rillig unreachable(); /* TODO: expect: 193 */ 207 1.3 rillig } 208 1.3 rillig reachable(); 209 1.3 rillig } 210 1.3 rillig 211 1.3 rillig void 212 1.3 rillig test_for_continue(void) 213 1.3 rillig { 214 1.3 rillig for (;;) { 215 1.3 rillig reachable(); 216 1.3 rillig continue; 217 1.3 rillig unreachable(); /* expect: 193 */ 218 1.3 rillig } 219 1.3 rillig unreachable(); /* expect: 193 */ 220 1.3 rillig } 221 1.3 rillig 222 1.3 rillig void 223 1.3 rillig test_for_if_continue(void) 224 1.3 rillig { 225 1.3 rillig for (;;) { 226 1.3 rillig reachable(); 227 1.3 rillig if (0) { 228 1.4 rillig unreachable(); /* expect: 193 */ 229 1.3 rillig continue; 230 1.3 rillig unreachable(); /* expect: 193 */ 231 1.3 rillig } 232 1.3 rillig if (1) { 233 1.3 rillig reachable(); 234 1.3 rillig continue; 235 1.3 rillig unreachable(); /* expect: 193 */ 236 1.3 rillig } 237 1.3 rillig unreachable(); /* TODO: expect: 193 */ 238 1.3 rillig } 239 1.3 rillig unreachable(); /* expect: 193 */ 240 1.3 rillig } 241 1.3 rillig 242 1.3 rillig void 243 1.3 rillig test_for_return(void) 244 1.2 rillig { 245 1.3 rillig for (;;) { 246 1.3 rillig reachable(); 247 1.3 rillig return; 248 1.3 rillig unreachable(); /* expect: 193 */ 249 1.3 rillig } 250 1.3 rillig unreachable(); /* expect: 193 */ 251 1.2 rillig } 252 1.3 rillig 253 1.3 rillig void 254 1.3 rillig test_for_if_return(void) 255 1.3 rillig { 256 1.3 rillig for (;;) { 257 1.3 rillig reachable(); 258 1.3 rillig if (0) { 259 1.4 rillig unreachable(); /* expect: 193 */ 260 1.3 rillig return; 261 1.3 rillig unreachable(); /* expect: 193 */ 262 1.3 rillig } 263 1.3 rillig if (1) { 264 1.3 rillig reachable(); 265 1.3 rillig return; 266 1.3 rillig unreachable(); /* expect: 193 */ 267 1.3 rillig } 268 1.3 rillig unreachable(); /* TODO: expect: 193 */ 269 1.3 rillig } 270 1.3 rillig unreachable(); /* expect: 193 */ 271 1.3 rillig } 272 1.3 rillig 273 1.3 rillig void 274 1.3 rillig test_while_true(void) 275 1.3 rillig { 276 1.3 rillig while (1) 277 1.3 rillig reachable(); 278 1.3 rillig unreachable(); /* expect: 193 */ 279 1.3 rillig } 280 1.3 rillig 281 1.3 rillig void 282 1.3 rillig test_while_false(void) 283 1.3 rillig { 284 1.3 rillig while (0) 285 1.3 rillig unreachable(); /* TODO: expect: 193 */ 286 1.3 rillig reachable(); 287 1.3 rillig } 288 1.3 rillig 289 1.3 rillig void 290 1.3 rillig test_while_break(void) 291 1.3 rillig { 292 1.3 rillig while (1) { 293 1.3 rillig reachable(); 294 1.3 rillig break; 295 1.3 rillig unreachable(); /* expect: 193 */ 296 1.3 rillig } 297 1.3 rillig reachable(); 298 1.3 rillig } 299 1.3 rillig 300 1.3 rillig void 301 1.3 rillig test_while_if_break(void) 302 1.3 rillig { 303 1.3 rillig while (1) { 304 1.3 rillig reachable(); 305 1.3 rillig if (0) { 306 1.4 rillig unreachable(); /* expect: 193 */ 307 1.3 rillig break; 308 1.3 rillig unreachable(); /* expect: 193 */ 309 1.3 rillig } 310 1.3 rillig if (1) { 311 1.3 rillig reachable(); 312 1.3 rillig break; 313 1.3 rillig unreachable(); /* expect: 193 */ 314 1.3 rillig } 315 1.3 rillig unreachable(); /* TODO: expect: 193 */ 316 1.3 rillig } 317 1.3 rillig reachable(); 318 1.3 rillig } 319 1.3 rillig 320 1.3 rillig void 321 1.3 rillig test_while_continue(void) 322 1.3 rillig { 323 1.3 rillig while (1) { 324 1.3 rillig reachable(); 325 1.3 rillig continue; 326 1.3 rillig unreachable(); /* expect: 193 */ 327 1.3 rillig } 328 1.3 rillig unreachable(); /* expect: 193 */ 329 1.3 rillig } 330 1.3 rillig 331 1.3 rillig void 332 1.3 rillig test_while_if_continue(void) 333 1.3 rillig { 334 1.3 rillig while (1) { 335 1.3 rillig reachable(); 336 1.3 rillig if (0) { 337 1.4 rillig unreachable(); /* expect: 193 */ 338 1.3 rillig continue; 339 1.3 rillig unreachable(); /* expect: 193 */ 340 1.3 rillig } 341 1.3 rillig if (1) { 342 1.3 rillig reachable(); 343 1.3 rillig continue; 344 1.3 rillig unreachable(); /* expect: 193 */ 345 1.3 rillig } 346 1.3 rillig unreachable(); /* TODO: expect: 193 */ 347 1.3 rillig } 348 1.3 rillig unreachable(); /* expect: 193 */ 349 1.3 rillig } 350 1.3 rillig 351 1.3 rillig void 352 1.3 rillig test_while_return(void) 353 1.3 rillig { 354 1.3 rillig while (1) { 355 1.3 rillig reachable(); 356 1.3 rillig return; 357 1.3 rillig unreachable(); /* expect: 193 */ 358 1.3 rillig } 359 1.3 rillig unreachable(); /* expect: 193 */ 360 1.3 rillig } 361 1.3 rillig 362 1.3 rillig void 363 1.3 rillig test_while_if_return(void) 364 1.3 rillig { 365 1.3 rillig while (1) { 366 1.3 rillig reachable(); 367 1.3 rillig if (0) { 368 1.4 rillig unreachable(); /* expect: 193 */ 369 1.3 rillig return; 370 1.3 rillig unreachable(); /* expect: 193 */ 371 1.3 rillig } 372 1.3 rillig if (1) { 373 1.3 rillig reachable(); 374 1.3 rillig return; 375 1.3 rillig unreachable(); /* expect: 193 */ 376 1.3 rillig } 377 1.3 rillig unreachable(); /* TODO: expect: 193 */ 378 1.3 rillig } 379 1.3 rillig unreachable(); /* expect: 193 */ 380 1.3 rillig } 381 1.3 rillig 382 1.3 rillig void 383 1.3 rillig test_do_while_true(void) 384 1.3 rillig { 385 1.3 rillig do { 386 1.3 rillig reachable(); 387 1.3 rillig } while (1); 388 1.3 rillig unreachable(); /* expect: 193 */ 389 1.3 rillig } 390 1.3 rillig 391 1.3 rillig void 392 1.3 rillig test_do_while_false(void) 393 1.3 rillig { 394 1.3 rillig do { 395 1.3 rillig reachable(); 396 1.3 rillig } while (0); 397 1.3 rillig reachable(); 398 1.3 rillig } 399 1.3 rillig 400 1.3 rillig void 401 1.3 rillig test_do_while_break(void) 402 1.3 rillig { 403 1.3 rillig do { 404 1.3 rillig reachable(); 405 1.3 rillig break; 406 1.3 rillig unreachable(); /* expect: 193 */ 407 1.3 rillig } while (1); 408 1.3 rillig reachable(); 409 1.3 rillig } 410 1.3 rillig 411 1.3 rillig void 412 1.3 rillig test_do_while_if_break(void) 413 1.3 rillig { 414 1.3 rillig do { 415 1.3 rillig reachable(); 416 1.3 rillig if (0) { 417 1.4 rillig unreachable(); /* expect: 193 */ 418 1.3 rillig break; 419 1.3 rillig unreachable(); /* expect: 193 */ 420 1.3 rillig } 421 1.3 rillig if (1) { 422 1.3 rillig reachable(); 423 1.3 rillig break; 424 1.3 rillig unreachable(); /* expect: 193 */ 425 1.3 rillig } 426 1.3 rillig unreachable(); /* TODO: expect: 193 */ 427 1.3 rillig } while (1); 428 1.3 rillig reachable(); 429 1.3 rillig } 430 1.3 rillig 431 1.3 rillig void 432 1.3 rillig test_do_while_continue(void) 433 1.3 rillig { 434 1.3 rillig do { 435 1.3 rillig reachable(); 436 1.3 rillig continue; 437 1.3 rillig unreachable(); /* expect: 193 */ 438 1.3 rillig } while (1); 439 1.3 rillig unreachable(); /* expect: 193 */ 440 1.3 rillig } 441 1.3 rillig 442 1.3 rillig void 443 1.3 rillig test_do_while_if_continue(void) 444 1.3 rillig { 445 1.3 rillig do { 446 1.3 rillig reachable(); 447 1.3 rillig if (0) { 448 1.4 rillig unreachable(); /* expect: 193 */ 449 1.3 rillig continue; 450 1.3 rillig unreachable(); /* expect: 193 */ 451 1.3 rillig } 452 1.3 rillig if (1) { 453 1.3 rillig reachable(); 454 1.3 rillig continue; 455 1.3 rillig unreachable(); /* expect: 193 */ 456 1.3 rillig } 457 1.3 rillig unreachable(); /* TODO: expect: 193 */ 458 1.3 rillig } while (1); 459 1.3 rillig unreachable(); /* expect: 193 */ 460 1.3 rillig } 461 1.3 rillig 462 1.3 rillig void 463 1.3 rillig test_do_while_return(void) 464 1.3 rillig { 465 1.3 rillig do { 466 1.3 rillig reachable(); 467 1.3 rillig return; 468 1.3 rillig unreachable(); /* expect: 193 */ 469 1.3 rillig } while (1); 470 1.3 rillig unreachable(); /* expect: 193 */ 471 1.3 rillig } 472 1.3 rillig 473 1.3 rillig void 474 1.3 rillig test_do_while_if_return(void) 475 1.3 rillig { 476 1.3 rillig do { 477 1.3 rillig reachable(); 478 1.3 rillig if (0) { 479 1.4 rillig unreachable(); /* expect: 193 */ 480 1.3 rillig return; 481 1.3 rillig unreachable(); /* expect: 193 */ 482 1.3 rillig } 483 1.3 rillig if (1) { 484 1.3 rillig reachable(); 485 1.3 rillig return; 486 1.3 rillig unreachable(); /* expect: 193 */ 487 1.3 rillig } 488 1.3 rillig unreachable(); /* TODO: expect: 193 */ 489 1.3 rillig } while (1); 490 1.3 rillig unreachable(); /* expect: 193 */ 491 1.3 rillig } 492 1.3 rillig 493 1.3 rillig /* TODO: switch */ 494 1.3 rillig 495 1.3 rillig /* TODO: goto */ 496 1.3 rillig 497 1.3 rillig /* TODO: system-dependent constant expression (see tn_system_dependent) */ 498