Module Name: src Committed By: rillig Date: Wed Jul 10 20:33:38 UTC 2024
Modified Files: src/distrib/sets/lists/tests: mi src/tests/usr.bin/xlint/lint1: t_usage.sh src/usr.bin/xlint/lint1: err.c tree.c Added Files: src/tests/usr.bin/xlint/lint1: msg_382.c Log Message: lint: add warning for '!(var = constant)' This catches expressions like 'ATF_CHECK(errno = ENOENT)', which was intended to use '==' instead of '='. To generate a diff of this commit: cvs rdiff -u -r1.1327 -r1.1328 src/distrib/sets/lists/tests/mi cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/msg_382.c cvs rdiff -u -r1.22 -r1.23 src/tests/usr.bin/xlint/lint1/t_usage.sh cvs rdiff -u -r1.246 -r1.247 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.648 -r1.649 src/usr.bin/xlint/lint1/tree.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.1327 src/distrib/sets/lists/tests/mi:1.1328 --- src/distrib/sets/lists/tests/mi:1.1327 Wed Jul 10 20:29:32 2024 +++ src/distrib/sets/lists/tests/mi Wed Jul 10 20:33:37 2024 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1327 2024/07/10 20:29:32 rillig Exp $ +# $NetBSD: mi,v 1.1328 2024/07/10 20:33:37 rillig Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -7544,6 +7544,7 @@ ./usr/tests/usr.bin/xlint/lint1/msg_379.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/msg_380.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/msg_381.c tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/xlint/lint1/msg_382.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/op_colon.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/op_colon.exp tests-obsolete obsolete,atf ./usr/tests/usr.bin/xlint/lint1/op_shl_lp64.c tests-usr.bin-tests compattestfile,atf Index: src/tests/usr.bin/xlint/lint1/t_usage.sh diff -u src/tests/usr.bin/xlint/lint1/t_usage.sh:1.22 src/tests/usr.bin/xlint/lint1/t_usage.sh:1.23 --- src/tests/usr.bin/xlint/lint1/t_usage.sh:1.22 Sun Jun 9 10:27:39 2024 +++ src/tests/usr.bin/xlint/lint1/t_usage.sh Wed Jul 10 20:33:38 2024 @@ -1,4 +1,4 @@ -# $NetBSD: t_usage.sh,v 1.22 2024/06/09 10:27:39 rillig Exp $ +# $NetBSD: t_usage.sh,v 1.23 2024/07/10 20:33:38 rillig Exp $ # # Copyright (c) 2023 The NetBSD Foundation, Inc. # All rights reserved. @@ -39,13 +39,13 @@ suppress_messages_body() # The largest known message. atf_check \ - "$lint1" -X 381 code.c /dev/null + "$lint1" -X 382 code.c /dev/null # Larger than the largest known message. atf_check \ -s 'exit:1' \ - -e "inline:lint1: invalid message ID '382'\n" \ - "$lint1" -X 382 code.c /dev/null + -e "inline:lint1: invalid message ID '383'\n" \ + "$lint1" -X 383 code.c /dev/null # Whitespace is not allowed before a message ID. atf_check \ Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.246 src/usr.bin/xlint/lint1/err.c:1.247 --- src/usr.bin/xlint/lint1/err.c:1.246 Sun Jun 9 10:27:39 2024 +++ src/usr.bin/xlint/lint1/err.c Wed Jul 10 20:33:37 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.246 2024/06/09 10:27:39 rillig Exp $ */ +/* $NetBSD: err.c,v 1.247 2024/07/10 20:33:37 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: err.c,v 1.246 2024/06/09 10:27:39 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.247 2024/07/10 20:33:37 rillig Exp $"); #endif #include <limits.h> @@ -437,6 +437,7 @@ static const char *const msgs[] = { "comparing integer '%s' to floating point constant %Lg", // 379 "lossy conversion of %Lg to '%s', arg #%d", // 380 "lossy conversion of %Lg to '%s'", // 381 + "constant assignment of type '%s' in operand of '!' always evaluates to '%s'", // 382 }; static bool is_suppressed[sizeof(msgs) / sizeof(msgs[0])]; Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.648 src/usr.bin/xlint/lint1/tree.c:1.649 --- src/usr.bin/xlint/lint1/tree.c:1.648 Mon Jun 17 17:06:47 2024 +++ src/usr.bin/xlint/lint1/tree.c Wed Jul 10 20:33:37 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.648 2024/06/17 17:06:47 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.649 2024/07/10 20:33:37 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: tree.c,v 1.648 2024/06/17 17:06:47 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.649 2024/07/10 20:33:37 rillig Exp $"); #endif #include <float.h> @@ -1809,6 +1809,15 @@ build_binary(tnode_t *ln, op_t op, bool case ARROW: ntn = build_struct_access(op, sys, ln, rn); break; + case NOT: + if (ln->tn_op == ASSIGN && ln->u.ops.right->tn_op == CON) { + /* constant assignment of type '%s' in operand ... */ + warning(382, type_name(ln->tn_type), + is_nonzero_val(&ln->u.ops.right->u.value) + ? "true" : "false"); + } + ntn = build_op(op, sys, gettyp(Tflag ? BOOL : INT), ln, NULL); + break; case INCAFT: case DECAFT: case INCBEF: Added files: Index: src/tests/usr.bin/xlint/lint1/msg_382.c diff -u /dev/null src/tests/usr.bin/xlint/lint1/msg_382.c:1.1 --- /dev/null Wed Jul 10 20:33:38 2024 +++ src/tests/usr.bin/xlint/lint1/msg_382.c Wed Jul 10 20:33:38 2024 @@ -0,0 +1,28 @@ +/* $NetBSD: msg_382.c,v 1.1 2024/07/10 20:33:38 rillig Exp $ */ +# 3 "msg_382.c" + +// Test for message: constant assignment of type '%s' in operand of '!' always evaluates to '%s' [382] + +/* + * Outside strict bool mode, an assignment can be used as a condition, but + * that is generally wrong. Especially if a constant is assigned to a + * variable, the condition always evaluates to that constant value, which + * indicates a typo, as '==' makes more sense than '=' in a condition. + */ + +/* lint1-extra-flags: -X 351 */ + +int +/* expect+1: warning: parameter 'b' unused in function 'conversions' [231] */ +conversions(int a, int b) +{ + /* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'true' [382] */ + if (!(a = 13)) + return 1; + /* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'false' [382] */ + if (!(b = 0)) + return 2; + if (!(a = a + 1)) + return 3; + return a; +}