Module Name: src Committed By: rillig Date: Sat Jan 15 23:21:34 UTC 2022
Modified Files: src/tests/usr.bin/xlint/lint1: msg_193.c msg_193.exp msg_249.c msg_249.exp src/usr.bin/xlint/lint1: cgram.y Log Message: lint: warn about unreachable null statements This warning flags the second semicolon of 'return;;' as being unreachable. It does not warn about these superfluous semicolons in general though. Seen in usr.bin/make/bmake_malloc.c. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/tests/usr.bin/xlint/lint1/msg_193.c cvs rdiff -u -r1.14 -r1.15 src/tests/usr.bin/xlint/lint1/msg_193.exp cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/xlint/lint1/msg_249.c cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/msg_249.exp cvs rdiff -u -r1.378 -r1.379 src/usr.bin/xlint/lint1/cgram.y 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.15 src/tests/usr.bin/xlint/lint1/msg_193.c:1.16 --- src/tests/usr.bin/xlint/lint1/msg_193.c:1.15 Sat Jan 15 22:12:35 2022 +++ src/tests/usr.bin/xlint/lint1/msg_193.c Sat Jan 15 23:21:34 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_193.c,v 1.15 2022/01/15 22:12:35 rillig Exp $ */ +/* $NetBSD: msg_193.c,v 1.16 2022/01/15 23:21:34 rillig Exp $ */ # 3 "msg_193.c" // Test for message: statement not reached [193] @@ -658,12 +658,27 @@ lint_annotation_NOTREACHED(void) } /* - * Since at least 2002, lint does not detect a double semicolon. See - * cgram.y, expression_statement, T_SEMI. + * Since at least 2002 and before cgram.y 1.379 from 2022-01-16, lint did not + * detect a double semicolon. See cgram.y, expression_statement, T_SEMI. */ int -test_empty_statement(int x) +test_null_statement(void) { - /* TODO: expect+1: warning: statement not reachable [193] */ - return x > 0 ? x : -x;; + /* + * The following 2 semicolons are superfluous but lint doesn't warn + * about them. Probably it should. A null statement as part of a + * block-list has no use. + */ + ;; + + /* + * A stand-alone null statement, on the other hand, has its purpose. + * Without it, the 'for' loop would not be complete. The NetBSD + * style is to use 'continue;' instead of a simple ';'. + */ + for (int i = 0; i < 10; i++) + ; + + /* expect+1: warning: statement not reached [193] */ + return 0;; } Index: src/tests/usr.bin/xlint/lint1/msg_193.exp diff -u src/tests/usr.bin/xlint/lint1/msg_193.exp:1.14 src/tests/usr.bin/xlint/lint1/msg_193.exp:1.15 --- src/tests/usr.bin/xlint/lint1/msg_193.exp:1.14 Sun Aug 15 21:51:56 2021 +++ src/tests/usr.bin/xlint/lint1/msg_193.exp Sat Jan 15 23:21:34 2022 @@ -87,3 +87,4 @@ msg_193.c(597): warning: statement not r msg_193.c(606): warning: statement not reached [193] msg_193.c(627): warning: statement not reached [193] msg_193.c(655): warning: statement not reached [193] +msg_193.c(683): warning: statement not reached [193] Index: src/tests/usr.bin/xlint/lint1/msg_249.c diff -u src/tests/usr.bin/xlint/lint1/msg_249.c:1.8 src/tests/usr.bin/xlint/lint1/msg_249.c:1.9 --- src/tests/usr.bin/xlint/lint1/msg_249.c:1.8 Sat Jul 10 17:35:54 2021 +++ src/tests/usr.bin/xlint/lint1/msg_249.c Sat Jan 15 23:21:34 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_249.c,v 1.8 2021/07/10 17:35:54 rillig Exp $ */ +/* $NetBSD: msg_249.c,v 1.9 2022/01/15 23:21:34 rillig Exp $ */ # 3 "msg_249.c" // Test for message: syntax error '%s' [249] @@ -28,6 +28,7 @@ int recover_from_rbrace; void function(void) { + /* expect+2: warning: statement not reached [193] */ if (0) ; ); /* expect: syntax error ')' */ Index: src/tests/usr.bin/xlint/lint1/msg_249.exp diff -u src/tests/usr.bin/xlint/lint1/msg_249.exp:1.6 src/tests/usr.bin/xlint/lint1/msg_249.exp:1.7 --- src/tests/usr.bin/xlint/lint1/msg_249.exp:1.6 Sat Jul 10 11:22:19 2021 +++ src/tests/usr.bin/xlint/lint1/msg_249.exp Sat Jan 15 23:21:34 2022 @@ -1,4 +1,5 @@ msg_249.c(10): error: syntax error '"' [249] msg_249.c(19): error: syntax error '"' [249] -msg_249.c(33): error: syntax error ')' [249] -msg_249.c(58): error: syntax error 'member without type' [249] +msg_249.c(33): warning: statement not reached [193] +msg_249.c(34): error: syntax error ')' [249] +msg_249.c(59): error: syntax error 'member without type' [249] Index: src/usr.bin/xlint/lint1/cgram.y diff -u src/usr.bin/xlint/lint1/cgram.y:1.378 src/usr.bin/xlint/lint1/cgram.y:1.379 --- src/usr.bin/xlint/lint1/cgram.y:1.378 Sun Dec 26 18:16:41 2021 +++ src/usr.bin/xlint/lint1/cgram.y Sat Jan 15 23:21:34 2022 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.378 2021/12/26 18:16:41 christos Exp $ */ +/* $NetBSD: cgram.y,v 1.379 2022/01/15 23:21:34 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: cgram.y,v 1.378 2021/12/26 18:16:41 christos Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.379 2022/01/15 23:21:34 rillig Exp $"); #endif #include <limits.h> @@ -1731,6 +1731,7 @@ expression_statement: /* C99 6.8.3 */ seen_fallthrough = false; } | T_SEMI { + check_statement_reachable(); seen_fallthrough = false; } ;