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);

Reply via email to