Module Name:    src
Committed By:   rillig
Date:           Sat May 11 15:53:38 UTC 2024

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: msg_162.c t_usage.sh
        src/usr.bin/xlint/lint1: err.c makeman tree.c
Added Files:
        src/tests/usr.bin/xlint/lint1: msg_379.c

Log Message:
lint: warn when comparing an integer to a floating point constant


To generate a diff of this commit:
cvs rdiff -u -r1.1315 -r1.1316 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/xlint/lint1/msg_162.c
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/msg_379.c
cvs rdiff -u -r1.20 -r1.21 src/tests/usr.bin/xlint/lint1/t_usage.sh
cvs rdiff -u -r1.242 -r1.243 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/xlint/lint1/makeman
cvs rdiff -u -r1.641 -r1.642 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.1315 src/distrib/sets/lists/tests/mi:1.1316
--- src/distrib/sets/lists/tests/mi:1.1315	Sun May  5 02:53:01 2024
+++ src/distrib/sets/lists/tests/mi	Sat May 11 15:53:38 2024
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1315 2024/05/05 02:53:01 riastradh Exp $
+# $NetBSD: mi,v 1.1316 2024/05/11 15:53:38 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -7509,6 +7509,7 @@
 ./usr/tests/usr.bin/xlint/lint1/msg_376.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/msg_377.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/msg_378.c			tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/msg_379.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/msg_162.c
diff -u src/tests/usr.bin/xlint/lint1/msg_162.c:1.8 src/tests/usr.bin/xlint/lint1/msg_162.c:1.9
--- src/tests/usr.bin/xlint/lint1/msg_162.c:1.8	Tue Mar 28 14:44:35 2023
+++ src/tests/usr.bin/xlint/lint1/msg_162.c	Sat May 11 15:53:38 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_162.c,v 1.8 2023/03/28 14:44:35 rillig Exp $	*/
+/*	$NetBSD: msg_162.c,v 1.9 2024/05/11 15:53:38 rillig Exp $	*/
 # 3 "msg_162.c"
 
 // Test for message: operator '%s' compares '%s' with '%s' [162]
@@ -8,6 +8,7 @@
 void
 left_unsigned(unsigned int ui)
 {
+	/* expect+1: warning: comparing integer 'unsigned int' to floating point constant -5 [379] */
 	if (ui < -5.0) {
 	}
 

Index: src/tests/usr.bin/xlint/lint1/t_usage.sh
diff -u src/tests/usr.bin/xlint/lint1/t_usage.sh:1.20 src/tests/usr.bin/xlint/lint1/t_usage.sh:1.21
--- src/tests/usr.bin/xlint/lint1/t_usage.sh:1.20	Sat Apr 27 10:08:54 2024
+++ src/tests/usr.bin/xlint/lint1/t_usage.sh	Sat May 11 15:53:38 2024
@@ -1,4 +1,4 @@
-# $NetBSD: t_usage.sh,v 1.20 2024/04/27 10:08:54 rillig Exp $
+# $NetBSD: t_usage.sh,v 1.21 2024/05/11 15:53: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 378 code.c /dev/null
+	    "$lint1" -X 379 code.c /dev/null
 
 	# Larger than the largest known message.
 	atf_check \
 	    -s 'exit:1' \
-	    -e "inline:lint1: invalid message ID '379'\n" \
-	    "$lint1" -X 379 code.c /dev/null
+	    -e "inline:lint1: invalid message ID '380'\n" \
+	    "$lint1" -X 380 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.242 src/usr.bin/xlint/lint1/err.c:1.243
--- src/usr.bin/xlint/lint1/err.c:1.242	Thu May  9 20:53:13 2024
+++ src/usr.bin/xlint/lint1/err.c	Sat May 11 15:53:38 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.242 2024/05/09 20:53:13 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.243 2024/05/11 15:53:38 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.242 2024/05/09 20:53:13 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.243 2024/05/11 15:53:38 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -434,6 +434,7 @@ static const char *const msgs[] = {
 	"'%.*s' overlaps earlier '%.*s' on bit %u",			// 376
 	"redundant '\\0' at the end of the format",			// 377
 	"conversion '%.*s' is unreachable by input value",		// 378
+	"comparing integer '%s' to floating point constant %Lg",	// 379
 };
 
 static bool is_suppressed[sizeof(msgs) / sizeof(msgs[0])];

Index: src/usr.bin/xlint/lint1/makeman
diff -u src/usr.bin/xlint/lint1/makeman:1.9 src/usr.bin/xlint/lint1/makeman:1.10
--- src/usr.bin/xlint/lint1/makeman:1.9	Tue Feb  6 22:47:21 2024
+++ src/usr.bin/xlint/lint1/makeman	Sat May 11 15:53:38 2024
@@ -1,5 +1,5 @@
 #!/bin/sh
-#	$NetBSD: makeman,v 1.9 2024/02/06 22:47:21 rillig Exp $
+#	$NetBSD: makeman,v 1.10 2024/05/11 15:53:38 rillig Exp $
 #
 # Copyright (c) 2000 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -38,9 +38,9 @@ list_messages() {
 	    -e 's|^'"$tab"'"",.*// '"$2"'[0-9]+$|---'"$tab"'(no longer used)|p' \
 	    "$1" \
 	| ${SED} -E \
-	    -e 's,%ld,%d,g' \
-	    -e 's,%lu,%u,g' \
-	    -e 's,%llu,%u,g' \
+	    -e 's,%ld|%jd,%d,g' \
+	    -e 's,%lu|%llu|%ju,%u,g' \
+	    -e 's,%Lg,%g,g' \
 	    -e 's|%.\*s|%s|g' \
 	    -e 's|\\"|"|g' \
 	    -e 's|\\\\|\\e|g' \
@@ -49,7 +49,7 @@ list_messages() {
 }
 
 # shellcheck disable=SC2016
-cvsid='$NetBSD: makeman,v 1.9 2024/02/06 22:47:21 rillig Exp $'
+cvsid='$NetBSD: makeman,v 1.10 2024/05/11 15:53:38 rillig Exp $'
 date="$1"
 year="${date##* }"
 messages="$(list_messages "$2" "")"

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.641 src/usr.bin/xlint/lint1/tree.c:1.642
--- src/usr.bin/xlint/lint1/tree.c:1.641	Fri May 10 21:43:40 2024
+++ src/usr.bin/xlint/lint1/tree.c	Sat May 11 15:53:38 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.641 2024/05/10 21:43:40 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.642 2024/05/11 15:53:38 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.641 2024/05/10 21:43:40 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.642 2024/05/11 15:53:38 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -758,6 +758,13 @@ balance(op_t op, tnode_t **lnp, tnode_t 
 	    ? usual_arithmetic_conversion_c90(lt, rt)
 	    : usual_arithmetic_conversion_trad(lt, rt);
 
+	if (modtab[op].m_comparison
+	    && is_integer(lt) && (*lnp)->tn_op != CON
+	    && is_floating(t) && (*rnp)->tn_op == CON)
+		/* comparing integer '%s' to floating point constant %Lg */
+		warning(379, type_name((*lnp)->tn_type),
+		    (*rnp)->u.value.u.floating);
+
 	if (t != lt)
 		*lnp = apply_usual_arithmetic_conversions(op, *lnp, t);
 	if (t != rt)

Added files:

Index: src/tests/usr.bin/xlint/lint1/msg_379.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/msg_379.c:1.1
--- /dev/null	Sat May 11 15:53:39 2024
+++ src/tests/usr.bin/xlint/lint1/msg_379.c	Sat May 11 15:53:38 2024
@@ -0,0 +1,31 @@
+/*	$NetBSD: msg_379.c,v 1.1 2024/05/11 15:53:38 rillig Exp $	*/
+# 3 "msg_379.c"
+
+// Test for message: comparing integer '%s' to floating point constant %Lg [379]
+
+/*
+ * Comparing an integer expression to a floating point constant mixes
+ * different kinds of types.  This mixture is more complicated than necessary,
+ * thus confusing human readers.
+ *
+ * The compilers are fine with this kind of expression: GCC treats the
+ * constant as an integer even at -O0 while Clang needs at least -O.
+ */
+
+/* lint1-extra-flags: -X 351 */
+
+int
+comparisons(int x)
+{
+	if (3 > 123.0)
+		/* expect+1: warning: statement not reached [193] */
+		return 0;
+	/* expect+1: warning: comparing integer 'int' to floating point constant 123 [379] */
+	if (x > 123.0)
+		return 1;
+
+	// Yoda-style comparisons are unusual enough to not warn about them.
+	if (123.0 > x)
+		return 2;
+	return 3;
+}

Reply via email to