Module Name: src Committed By: rillig Date: Sun Mar 21 14:09:41 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: msg_193.c msg_193.exp Log Message: tests/lint: add tests for reachability of statements Right now, reachability is only implemented for loops, but not for selection statements. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/msg_193.c \ src/tests/usr.bin/xlint/lint1/msg_193.exp Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint1/msg_193.c diff -u src/tests/usr.bin/xlint/lint1/msg_193.c:1.2 src/tests/usr.bin/xlint/lint1/msg_193.c:1.3 --- src/tests/usr.bin/xlint/lint1/msg_193.c:1.2 Sat Jan 30 17:56:29 2021 +++ src/tests/usr.bin/xlint/lint1/msg_193.c Sun Mar 21 14:09:40 2021 @@ -1,10 +1,497 @@ -/* $NetBSD: msg_193.c,v 1.2 2021/01/30 17:56:29 rillig Exp $ */ +/* $NetBSD: msg_193.c,v 1.3 2021/03/21 14:09:40 rillig Exp $ */ # 3 "msg_193.c" // Test for message: statement not reached [193] -void example(void) +/* + * Test the reachability of statements in a function. + * + * if + * if-else + * if-else-if-else + * for + * while + * do-while + * switch + * break + * continue + * goto + * return + * + * constant expression + * system-dependent constant expression + */ + +extern void +reachable(void); +extern void +unreachable(void); + +void +test_statement(void) +{ + reachable(); + reachable(); +} + +void +test_compound_statement(void) +{ + reachable(); + { + reachable(); + reachable(); + } + reachable(); +} + +void +test_if_statement(void) +{ + if (1) + reachable(); + reachable(); + if (0) + unreachable(); /* TODO: expect: 193 */ + reachable(); +} + +void +test_if_compound_statement(void) +{ + if (1) { + reachable(); + } + if (1) { + { + { + reachable(); + } + } + } + + if (0) { + unreachable(); /* TODO: expect: 193 */ + } + if (0) { + { + { + unreachable(); /* TODO: expect: 193 */ + } + } + } +} + +void +test_if_without_else(void) +{ + if (1) + reachable(); + reachable(); + + if (0) + unreachable(); /* TODO: expect: 193 */ + reachable(); +} + +void +test_if_with_else(void) +{ + if (1) + reachable(); + else + unreachable(); /* TODO: expect: 193 */ + reachable(); + + if (0) + unreachable(); /* TODO: expect: 193 */ + else + reachable(); + reachable(); +} + +void +test_if_else_if_else(void) +{ + if (1) + reachable(); + else if (1) + unreachable(); /* TODO: expect: 193 */ + else + unreachable(); /* TODO: expect: 193 */ + + if (0) + unreachable(); /* TODO: expect: 193 */ + else if (1) + reachable(); + else + unreachable(); /* TODO: expect: 193 */ + + if (0) + unreachable(); /* TODO: expect: 193 */ + else if (0) + unreachable(); /* TODO: expect: 193 */ + else + reachable(); +} + +void +test_if_return(void) +{ + if (1) + return; + unreachable(); /* TODO: expect: 193 */ +} + +void +test_if_else_return(void) +{ + if (1) + reachable(); + else + return; + reachable(); +} + +void +test_for_forever(void) +{ + for (;;) + reachable(); + unreachable(); /* expect: 193 */ +} + +void +test_for_true(void) +{ + for (; 1;) + reachable(); + unreachable(); /* expect: 193 */ +} + +void +test_for_false(void) +{ + for (; 0;) + unreachable(); /* TODO: expect: 193 */ + reachable(); +} + +void +test_for_break(void) +{ + for (;;) { + reachable(); + break; + unreachable(); /* expect: 193 */ + } + reachable(); +} + +void +test_for_if_break(void) +{ + for (;;) { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + break; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + break; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } + reachable(); +} + +void +test_for_continue(void) +{ + for (;;) { + reachable(); + continue; + unreachable(); /* expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_for_if_continue(void) +{ + for (;;) { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + continue; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + continue; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_for_return(void) { - return; - return; /* expect: 193 */ + for (;;) { + reachable(); + return; + unreachable(); /* expect: 193 */ + } + unreachable(); /* expect: 193 */ } + +void +test_for_if_return(void) +{ + for (;;) { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + return; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + return; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_while_true(void) +{ + while (1) + reachable(); + unreachable(); /* expect: 193 */ +} + +void +test_while_false(void) +{ + while (0) + unreachable(); /* TODO: expect: 193 */ + reachable(); +} + +void +test_while_break(void) +{ + while (1) { + reachable(); + break; + unreachable(); /* expect: 193 */ + } + reachable(); +} + +void +test_while_if_break(void) +{ + while (1) { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + break; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + break; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } + reachable(); +} + +void +test_while_continue(void) +{ + while (1) { + reachable(); + continue; + unreachable(); /* expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_while_if_continue(void) +{ + while (1) { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + continue; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + continue; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_while_return(void) +{ + while (1) { + reachable(); + return; + unreachable(); /* expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_while_if_return(void) +{ + while (1) { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + return; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + return; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } + unreachable(); /* expect: 193 */ +} + +void +test_do_while_true(void) +{ + do { + reachable(); + } while (1); + unreachable(); /* expect: 193 */ +} + +void +test_do_while_false(void) +{ + do { + reachable(); + } while (0); + reachable(); +} + +void +test_do_while_break(void) +{ + do { + reachable(); + break; + unreachable(); /* expect: 193 */ + } while (1); + reachable(); +} + +void +test_do_while_if_break(void) +{ + do { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + break; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + break; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } while (1); + reachable(); +} + +void +test_do_while_continue(void) +{ + do { + reachable(); + continue; + unreachable(); /* expect: 193 */ + } while (1); + unreachable(); /* expect: 193 */ +} + +void +test_do_while_if_continue(void) +{ + do { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + continue; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + continue; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } while (1); + unreachable(); /* expect: 193 */ +} + +void +test_do_while_return(void) +{ + do { + reachable(); + return; + unreachable(); /* expect: 193 */ + } while (1); + unreachable(); /* expect: 193 */ +} + +void +test_do_while_if_return(void) +{ + do { + reachable(); + if (0) { + unreachable(); /* TODO: expect: 193 */ + return; + unreachable(); /* expect: 193 */ + } + if (1) { + reachable(); + return; + unreachable(); /* expect: 193 */ + } + unreachable(); /* TODO: expect: 193 */ + } while (1); + unreachable(); /* expect: 193 */ +} + +/* TODO: switch */ + +/* TODO: goto */ + +/* TODO: system-dependent constant expression (see tn_system_dependent) */ Index: src/tests/usr.bin/xlint/lint1/msg_193.exp diff -u src/tests/usr.bin/xlint/lint1/msg_193.exp:1.2 src/tests/usr.bin/xlint/lint1/msg_193.exp:1.3 --- src/tests/usr.bin/xlint/lint1/msg_193.exp:1.2 Sat Jan 30 17:56:29 2021 +++ src/tests/usr.bin/xlint/lint1/msg_193.exp Sun Mar 21 14:09:40 2021 @@ -1 +1,43 @@ -msg_193.c(9): warning: statement not reached [193] +msg_193.c(161): warning: statement not reached [193] +msg_193.c(169): warning: statement not reached [193] +msg_193.c(186): warning: statement not reached [193] +msg_193.c(199): warning: statement not reached [193] +msg_193.c(204): warning: statement not reached [193] +msg_193.c(217): warning: statement not reached [193] +msg_193.c(219): warning: statement not reached [193] +msg_193.c(230): warning: statement not reached [193] +msg_193.c(235): warning: statement not reached [193] +msg_193.c(239): warning: statement not reached [193] +msg_193.c(248): warning: statement not reached [193] +msg_193.c(250): warning: statement not reached [193] +msg_193.c(261): warning: statement not reached [193] +msg_193.c(266): warning: statement not reached [193] +msg_193.c(270): warning: statement not reached [193] +msg_193.c(278): warning: statement not reached [193] +msg_193.c(295): warning: statement not reached [193] +msg_193.c(308): warning: statement not reached [193] +msg_193.c(313): warning: statement not reached [193] +msg_193.c(326): warning: statement not reached [193] +msg_193.c(328): warning: statement not reached [193] +msg_193.c(339): warning: statement not reached [193] +msg_193.c(344): warning: statement not reached [193] +msg_193.c(348): warning: statement not reached [193] +msg_193.c(357): warning: statement not reached [193] +msg_193.c(359): warning: statement not reached [193] +msg_193.c(370): warning: statement not reached [193] +msg_193.c(375): warning: statement not reached [193] +msg_193.c(379): warning: statement not reached [193] +msg_193.c(388): warning: statement not reached [193] +msg_193.c(406): warning: statement not reached [193] +msg_193.c(419): warning: statement not reached [193] +msg_193.c(424): warning: statement not reached [193] +msg_193.c(437): warning: statement not reached [193] +msg_193.c(439): warning: statement not reached [193] +msg_193.c(450): warning: statement not reached [193] +msg_193.c(455): warning: statement not reached [193] +msg_193.c(459): warning: statement not reached [193] +msg_193.c(468): warning: statement not reached [193] +msg_193.c(470): warning: statement not reached [193] +msg_193.c(481): warning: statement not reached [193] +msg_193.c(486): warning: statement not reached [193] +msg_193.c(490): warning: statement not reached [193]