Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/usr.bin/xlint/lint1 tests/lint: add tests for reachabi...



details:   https://anonhg.NetBSD.org/src/rev/20e9c3f79e4a
branches:  trunk
changeset: 1019838:20e9c3f79e4a
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Mar 21 14:09:40 2021 +0000

description:
tests/lint: add tests for reachability of statements

Right now, reachability is only implemented for loops, but not for
selection statements.

diffstat:

 tests/usr.bin/xlint/lint1/msg_193.c   |  495 +++++++++++++++++++++++++++++++++-
 tests/usr.bin/xlint/lint1/msg_193.exp |   44 ++-
 2 files changed, 534 insertions(+), 5 deletions(-)

diffs (truncated from 553 to 300 lines):

diff -r 626f4752a7fc -r 20e9c3f79e4a tests/usr.bin/xlint/lint1/msg_193.c
--- a/tests/usr.bin/xlint/lint1/msg_193.c       Sun Mar 21 13:10:58 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_193.c       Sun Mar 21 14:09:40 2021 +0000
@@ -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) {



Home | Main Index | Thread Index | Old Index