Module Name: src
Committed By: rillig
Date: Thu Feb 27 06:23:07 UTC 2025
Modified Files:
src/tests/usr.bin/xlint/lint1: msg_196.c
src/usr.bin/xlint/lint1: err.c tree.c
Log Message:
lint: add details to message about conversion in 'case'
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_196.c
cvs rdiff -u -r1.265 -r1.266 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.673 -r1.674 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/tests/usr.bin/xlint/lint1/msg_196.c
diff -u src/tests/usr.bin/xlint/lint1/msg_196.c:1.4 src/tests/usr.bin/xlint/lint1/msg_196.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_196.c:1.4 Thu Sep 7 06:17:35 2023
+++ src/tests/usr.bin/xlint/lint1/msg_196.c Thu Feb 27 06:23:07 2025
@@ -1,19 +1,22 @@
-/* $NetBSD: msg_196.c,v 1.4 2023/09/07 06:17:35 rillig Exp $ */
+/* $NetBSD: msg_196.c,v 1.5 2025/02/27 06:23:07 rillig Exp $ */
# 3 "msg_196.c"
-// Test for message: case label affected by conversion [196]
+// Test for message: case label is converted from '%s' to '%s' [196]
/* lint1-extra-flags: -X 351 */
+// C23 6.8.5.3p5 says: [...] The constant expression in each case label is
+// converted to the promoted type of the controlling expression. [...]
+
void
switch_int_unsigned(int x)
{
switch (x) {
- /* expect+1: warning: case label affected by conversion [196] */
+ /* expect+1: warning: case label is converted from 'unsigned int' to 'int' [196] */
case (unsigned int)-1:
- /* expect+1: warning: case label affected by conversion [196] */
+ /* expect+1: warning: case label is converted from 'unsigned int' to 'int' [196] */
case -2U:
- /* expect+1: warning: case label affected by conversion [196] */
+ /* expect+1: warning: case label is converted from 'unsigned long long' to 'int' [196] */
case 0x1000200030004000ULL:
return;
}
Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.265 src/usr.bin/xlint/lint1/err.c:1.266
--- src/usr.bin/xlint/lint1/err.c:1.265 Mon Feb 24 19:56:27 2025
+++ src/usr.bin/xlint/lint1/err.c Thu Feb 27 06:23:07 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.265 2025/02/24 19:56:27 rillig Exp $ */
+/* $NetBSD: err.c,v 1.266 2025/02/27 06:23:07 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.265 2025/02/24 19:56:27 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.266 2025/02/27 06:23:07 rillig Exp $");
#endif
#include <limits.h>
@@ -251,7 +251,7 @@ static const char *const msgs[] = {
"'%s' statement not reached", // 193
"label '%s' redefined", // 194
"case not in switch", // 195
- "case label affected by conversion", // 196
+ "case label is converted from '%s' to '%s'", // 196
"non-constant case expression", // 197
"non-integral case expression", // 198
"duplicate case '%jd' in switch", // 199
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.673 src/usr.bin/xlint/lint1/tree.c:1.674
--- src/usr.bin/xlint/lint1/tree.c:1.673 Mon Feb 24 19:56:27 2025
+++ src/usr.bin/xlint/lint1/tree.c Thu Feb 27 06:23:07 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.673 2025/02/24 19:56:27 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.674 2025/02/27 06:23:07 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.673 2025/02/24 19:56:27 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.674 2025/02/27 06:23:07 rillig Exp $");
#endif
#include <float.h>
@@ -4126,8 +4126,8 @@ warn_constant_check_range_truncated(op_t
/* initializer does not fit */
warning(178);
else if (op == CASE)
- /* case label affected by conversion */
- warning(196);
+ /* case label is converted from '%s' to '%s' */
+ warning(196, tspec_name(ot), type_name(tp));
else if (op == FARG)
/* conversion of '%s' to '%s' is out of range, arg #%d */
warning(295, type_name(gettyp(ot)), type_name(tp), arg);
@@ -4147,8 +4147,8 @@ warn_constant_check_range_loss(op_t op,
/* bit-field initializer out of range */
warning(11);
else if (op == CASE)
- /* case label affected by conversion */
- warning(196);
+ /* case label is converted from '%s' to '%s' */
+ warning(196, tspec_name(ot), type_name(tp));
else if (op == FARG)
/* conversion of '%s' to '%s' is out of range, arg #%d */
warning(295, type_name(gettyp(ot)), type_name(tp), arg);