Module Name:    src
Committed By:   rillig
Date:           Sun Mar 21 20:08:21 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: msg_193.c msg_193.exp

Log Message:
tests/lint: test reachability of goto and named labels


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 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.10 src/tests/usr.bin/xlint/lint1/msg_193.c:1.11
--- src/tests/usr.bin/xlint/lint1/msg_193.c:1.10	Sun Mar 21 19:39:01 2021
+++ src/tests/usr.bin/xlint/lint1/msg_193.c	Sun Mar 21 20:08:21 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_193.c,v 1.10 2021/03/21 19:39:01 rillig Exp $	*/
+/*	$NetBSD: msg_193.c,v 1.11 2021/03/21 20:08:21 rillig Exp $	*/
 # 3 "msg_193.c"
 
 // Test for message: statement not reached [193]
@@ -555,8 +555,64 @@ test_if_maybe(void)
 	reachable();
 }
 
-/* TODO: switch */
+/*
+ * To compute the reachability graph of this little monster, lint would have
+ * to keep all statements and their relations from the whole function in
+ * memory.  It doesn't do that.  Therefore it does not warn about any
+ * unreachable statements in this function.
+ */
+void
+test_goto_numbers_alphabetically(void)
+{
+	goto one;
+eight:
+	goto nine;
+five:
+	return;
+four:
+	goto five;
+nine:
+	goto ten;
+one:
+	goto two;
+seven:
+	goto eight;
+six:				/* expect: warning: label six unused */
+	goto seven;
+ten:
+	return;
+three:
+	goto four;
+two:
+	goto three;
+}
 
-/* TODO: goto */
+void
+test_while_goto(void)
+{
+	while (1) {
+		goto out;
+		break;		/* lint only warns with the -b option */
+	}
+	unreachable();		/* expect: 193 */
+out:
+	reachable();
+}
+
+void
+test_unreachable_label(void)
+{
+	if (0)
+		goto unreachable;	/* expect: 193 */
+	goto reachable;
+
+	/* named_label assumes that any label is reachable. */
+unreachable:
+	unreachable();
+reachable:
+	reachable();
+}
+
+/* TODO: switch */
 
 /* 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.10 src/tests/usr.bin/xlint/lint1/msg_193.exp:1.11
--- src/tests/usr.bin/xlint/lint1/msg_193.exp:1.10	Sun Mar 21 19:39:01 2021
+++ src/tests/usr.bin/xlint/lint1/msg_193.exp	Sun Mar 21 20:08:21 2021
@@ -82,3 +82,6 @@ msg_193.c(515): warning: statement not r
 msg_193.c(518): warning: statement not reached [193]
 msg_193.c(532): warning: statement not reached [193]
 msg_193.c(540): warning: statement not reached [193]
+msg_193.c(580): warning: label six unused in function test_goto_numbers_alphabetically [232]
+msg_193.c(597): warning: statement not reached [193]
+msg_193.c(606): warning: statement not reached [193]

Reply via email to