Source-Changes-HG archive

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

[src/trunk]: src/usr.bin/xlint/lint1 lint: invert condition in control flow a...



details: https://anonhg.NetBSD.org/src/rev/52db2e7a736f
branches: trunk
changeset: 380002:52db2e7a736f
user: rillig <rillig%NetBSD.org@localhost>
date: Wed Jun 30 11:29:29 2021 +0000
description:
lint: invert condition in control flow analysis of switch statements
The condition previously contained many negations, which was hard to
understand.
No functional change.
diffstat:
 usr.bin/xlint/lint1/func.c | 38 ++++++++++++++++++++------------------
 1 files changed, 20 insertions(+), 18 deletions(-)
diffs (72 lines):
diff -r e348392cc5c6 -r 52db2e7a736f usr.bin/xlint/lint1/func.c
--- a/usr.bin/xlint/lint1/func.c Wed Jun 30 11:20:32 2021 +0000
+++ b/usr.bin/xlint/lint1/func.c Wed Jun 30 11:29:29 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: func.c,v 1.111 2021年06月19日 19:59:02 rillig Exp $ */
+/* $NetBSD: func.c,v 1.112 2021年06月30日 11:29:29 rillig Exp $ */
 
 /*
 * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: func.c,v 1.111 2021年06月19日 19:59:02 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.112 2021年06月30日 11:29:29 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -747,12 +747,11 @@ switch2(void)
 
 lint_assert(cstmt->c_switch_type != NULL);
 
- /*
- * If the switch expression was of type enumeration, count the case
- * labels and the number of enumerators. If both counts are not
- * equal print a warning.
- */
 if (cstmt->c_switch_type->t_is_enum) {
+ /*
+ * Warn if the number of case labels is different from the
+ * number of enumerators.
+ */
 nenum = nclab = 0;
 lint_assert(cstmt->c_switch_type->t_enum != NULL);
 for (esym = cstmt->c_switch_type->t_enum->en_first_enumerator;
@@ -771,22 +770,25 @@ switch2(void)
 
 if (cstmt->c_break) {
 /*
- * end of switch always reached (c_break is only set if the
- * break statement can be reached).
+ * The end of the switch statement is always reached since
+ * c_break is only set if a break statement can actually
+ * be reached.
 */
 set_reached(true);
- } else if (!cstmt->c_default &&
- (!hflag || !cstmt->c_switch_type->t_is_enum ||
- nenum != nclab)) {
+ } else if (cstmt->c_default ||
+ (hflag && cstmt->c_switch_type->t_is_enum &&
+ nenum == nclab)) {
 /*
- * there are possible values which are not handled in
- * switch
+ * The end of the switch statement is reached if the end
+ * of the last statement inside it is reached.
+ */
+ } else {
+ /*
+ * There are possible values that are not handled in the
+ * switch statement.
 */
 set_reached(true);
- } /*
- * otherwise the end of the switch expression is reached
- * if the end of the last statement inside it is reached.
- */
+ }
 
 end_control_statement(CS_SWITCH);
 }


Home | Main Index | Thread Index | Old Index

AltStyle によって変換されたページ (->オリジナル) /