Module Name:    src
Committed By:   rillig
Date:           Sat Jun  8 06:37:06 UTC 2024

Modified Files:
        src/tests/usr.bin/xlint/lint1: d_constant_conv1.c expr_fold.c msg_011.c
            msg_164.c msg_166.c msg_221.c msg_222.c msg_296.c platform_ilp32.c
            platform_schar.c platform_uchar.c
        src/usr.bin/xlint/lint1: err.c tree.c

Log Message:
lint: add details to warnings about negative constant to unsigned


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/d_constant_conv1.c \
    src/tests/usr.bin/xlint/lint1/msg_166.c \
    src/tests/usr.bin/xlint/lint1/msg_222.c \
    src/tests/usr.bin/xlint/lint1/platform_ilp32.c \
    src/tests/usr.bin/xlint/lint1/platform_schar.c
cvs rdiff -u -r1.15 -r1.16 src/tests/usr.bin/xlint/lint1/expr_fold.c
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/xlint/lint1/msg_011.c
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/msg_164.c \
    src/tests/usr.bin/xlint/lint1/msg_221.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_296.c \
    src/tests/usr.bin/xlint/lint1/platform_uchar.c
cvs rdiff -u -r1.244 -r1.245 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.643 -r1.644 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/d_constant_conv1.c
diff -u src/tests/usr.bin/xlint/lint1/d_constant_conv1.c:1.5 src/tests/usr.bin/xlint/lint1/d_constant_conv1.c:1.6
--- src/tests/usr.bin/xlint/lint1/d_constant_conv1.c:1.5	Tue Mar 28 14:44:34 2023
+++ src/tests/usr.bin/xlint/lint1/d_constant_conv1.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: d_constant_conv1.c,v 1.5 2023/03/28 14:44:34 rillig Exp $	*/
+/*	$NetBSD: d_constant_conv1.c,v 1.6 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "d_constant_conv1.c"
 
 /* Flag information-losing constant conversion in argument lists */
@@ -10,6 +10,6 @@ int f(unsigned int);
 void
 should_fail()
 {
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned int', arg #1 [296] */
 	f(-1);
 }
Index: src/tests/usr.bin/xlint/lint1/msg_166.c
diff -u src/tests/usr.bin/xlint/lint1/msg_166.c:1.5 src/tests/usr.bin/xlint/lint1/msg_166.c:1.6
--- src/tests/usr.bin/xlint/lint1/msg_166.c:1.5	Fri Jul  7 19:45:22 2023
+++ src/tests/usr.bin/xlint/lint1/msg_166.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_166.c,v 1.5 2023/07/07 19:45:22 rillig Exp $	*/
+/*	$NetBSD: msg_166.c,v 1.6 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "msg_166.c"
 
 // Test for message: precision lost in bit-field assignment [166]
@@ -51,9 +51,9 @@ void example(void) {
 	bits.minus_8_to_7 = 8;
 
 	/* Clang doesn't warn about the -1. */
-	/* expect+1: warning: assignment of negative constant to unsigned type [164] */
+	/* expect+1: warning: assignment of negative constant -2 to unsigned type 'unsigned int:1' [164] */
 	bits.zero_to_1 = -2;
-	/* expect+1: warning: assignment of negative constant to unsigned type [164] */
+	/* expect+1: warning: assignment of negative constant -1 to unsigned type 'unsigned int:1' [164] */
 	bits.zero_to_1 = -1;
 	bits.zero_to_1 = 0;
 	bits.zero_to_1 = 1;
@@ -61,9 +61,9 @@ void example(void) {
 	bits.zero_to_1 = 2;
 
 	/* Clang doesn't warn about the -8. */
-	/* expect+1: warning: assignment of negative constant to unsigned type [164] */
+	/* expect+1: warning: assignment of negative constant -9 to unsigned type 'unsigned int:4' [164] */
 	bits.zero_to_15 = -9;
-	/* expect+1: warning: assignment of negative constant to unsigned type [164] */
+	/* expect+1: warning: assignment of negative constant -8 to unsigned type 'unsigned int:4' [164] */
 	bits.zero_to_15 = -8;
 	bits.zero_to_15 = 0;
 	bits.zero_to_15 = 15;
Index: src/tests/usr.bin/xlint/lint1/msg_222.c
diff -u src/tests/usr.bin/xlint/lint1/msg_222.c:1.5 src/tests/usr.bin/xlint/lint1/msg_222.c:1.6
--- src/tests/usr.bin/xlint/lint1/msg_222.c:1.5	Tue Mar 28 14:44:35 2023
+++ src/tests/usr.bin/xlint/lint1/msg_222.c	Sat Jun  8 06:37:06 2024
@@ -1,11 +1,11 @@
-/*	$NetBSD: msg_222.c,v 1.5 2023/03/28 14:44:35 rillig Exp $	*/
+/*	$NetBSD: msg_222.c,v 1.6 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "msg_222.c"
 
-// Test for message: conversion of negative constant to unsigned type [222]
+// Test for message: conversion of negative constant %lld to unsigned type '%s' [222]
 
 /* lint1-extra-flags: -X 351 */
 
-/* expect+1: warning: initialization of unsigned with negative constant [221] */
+/* expect+1: warning: initialization of unsigned type 'unsigned int' with negative constant -1 [221] */
 unsigned int global = -1;
 
 void take_unsigned_int(unsigned int);
@@ -13,10 +13,10 @@ void take_unsigned_int(unsigned int);
 void
 function(void)
 {
-	/* expect+1: warning: initialization of unsigned with negative constant [221] */
+	/* expect+1: warning: initialization of unsigned type 'unsigned int' with negative constant -1 [221] */
 	unsigned int local = -1;
 
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned int', arg #1 [296] */
 	take_unsigned_int(-1);
 
 	if (local & -1)
@@ -28,6 +28,6 @@ function(void)
 
 	local &= -1;
 
-	/* expect+1: warning: conversion of negative constant to unsigned type [222] */
+	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned int' [222] */
 	local += -1;
 }
Index: src/tests/usr.bin/xlint/lint1/platform_ilp32.c
diff -u src/tests/usr.bin/xlint/lint1/platform_ilp32.c:1.5 src/tests/usr.bin/xlint/lint1/platform_ilp32.c:1.6
--- src/tests/usr.bin/xlint/lint1/platform_ilp32.c:1.5	Wed Mar 27 19:28:20 2024
+++ src/tests/usr.bin/xlint/lint1/platform_ilp32.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: platform_ilp32.c,v 1.5 2024/03/27 19:28:20 rillig Exp $	*/
+/*	$NetBSD: platform_ilp32.c,v 1.6 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "platform_ilp32.c"
 
 /*
@@ -36,9 +36,9 @@ switch_u64(unsigned long long x)
 	case 0x333300000001:
 	/* expect+1: error: duplicate case '37529424232449' in switch [200] */
 	case 0x222200000001:
-	/* expect+1: warning: conversion of negative constant to unsigned type [222] */
+	/* expect+1: warning: conversion of negative constant -9223372036854775807 to unsigned type 'unsigned long long' [222] */
 	case -0x7fffffffffffffff:
-	/* expect+2: warning: conversion of negative constant to unsigned type [222] */
+	/* expect+2: warning: conversion of negative constant -9223372036854775807 to unsigned type 'unsigned long long' [222] */
 	/* expect+1: error: duplicate case '9223372036854775809' in switch [200] */
 	case -0x7fffffffffffffff:
 		break;
Index: src/tests/usr.bin/xlint/lint1/platform_schar.c
diff -u src/tests/usr.bin/xlint/lint1/platform_schar.c:1.5 src/tests/usr.bin/xlint/lint1/platform_schar.c:1.6
--- src/tests/usr.bin/xlint/lint1/platform_schar.c:1.5	Sat Dec  2 23:54:49 2023
+++ src/tests/usr.bin/xlint/lint1/platform_schar.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: platform_schar.c,v 1.5 2023/12/02 23:54:49 rillig Exp $	*/
+/*	$NetBSD: platform_schar.c,v 1.6 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "platform_schar.c"
 
 /*
@@ -6,7 +6,7 @@
  * representation as signed char.
  */
 
-/* lint1-extra-flags: -c -h -a -p -b -r -z -X 161 */
+/* lint1-extra-flags: -c -h -a -p -b -r -z -X 161,351 */
 /* lint1-only-if: schar */
 
 /* expect+1: warning: nonportable character comparison '-128 < ?' [230] */
@@ -17,3 +17,10 @@ typedef int char_int[(char)'\200' < (cha
 typedef int int_char[(char)-128 < (char)'\177' ? 1 : -1];
 /* expect+1: warning: nonportable character comparison '-128 < ?' [230] */
 typedef int int_int[(char)-128 < (char)127 ? 1 : -1];
+
+
+void
+first_to_upper(char *p)
+{
+	*p += 'A' - 'a';
+}

Index: src/tests/usr.bin/xlint/lint1/expr_fold.c
diff -u src/tests/usr.bin/xlint/lint1/expr_fold.c:1.15 src/tests/usr.bin/xlint/lint1/expr_fold.c:1.16
--- src/tests/usr.bin/xlint/lint1/expr_fold.c:1.15	Sun Mar 10 19:45:14 2024
+++ src/tests/usr.bin/xlint/lint1/expr_fold.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: expr_fold.c,v 1.15 2024/03/10 19:45:14 rillig Exp $	*/
+/*	$NetBSD: expr_fold.c,v 1.16 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "expr_fold.c"
 
 /*
@@ -67,11 +67,11 @@ fold_uminus(void)
 	take_int(-(4294967295));
 
 	take_uint(-(0));
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -2147483647 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(-(2147483647));
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -2147483648 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(-(2147483648));
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -4294967295 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(-(4294967295));
 }
 
@@ -85,13 +85,13 @@ fold_compl(void)
 	/* expect+1: warning: conversion of 'long' to 'int' is out of range, arg #1 [295] */
 	take_int(~(4294967295));
 
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(~(0));
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -2147483648 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(~(2147483647));
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -2147483649 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(~(2147483648));
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -4294967296 to unsigned type 'unsigned int', arg #1 [296] */
 	take_uint(~(4294967295));
 }
 

Index: src/tests/usr.bin/xlint/lint1/msg_011.c
diff -u src/tests/usr.bin/xlint/lint1/msg_011.c:1.7 src/tests/usr.bin/xlint/lint1/msg_011.c:1.8
--- src/tests/usr.bin/xlint/lint1/msg_011.c:1.7	Fri Jul  7 19:45:22 2023
+++ src/tests/usr.bin/xlint/lint1/msg_011.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_011.c,v 1.7 2023/07/07 19:45:22 rillig Exp $	*/
+/*	$NetBSD: msg_011.c,v 1.8 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "msg_011.c"
 
 // Test for message: bit-field initializer out of range [11]
@@ -14,17 +14,17 @@ example(void)
 	/* expect+1: warning: 's' set but not used in function 'example' [191] */
 	} s[] = {
 		/* expect+2: warning: bit-field initializer out of range [11] */
-		/* expect+1: warning: initialization of unsigned with negative constant [221] */
+		/* expect+1: warning: initialization of unsigned type 'unsigned int:3' with negative constant -8 [221] */
 		{ -8, -8 },
 
 		/* expect+2: warning: bit-field initializer out of range [11] */
-		/* expect+1: warning: initialization of unsigned with negative constant [221] */
+		/* expect+1: warning: initialization of unsigned type 'unsigned int:3' with negative constant -7 [221] */
 		{ -7, -7 },
 
-		/* expect+1: warning: initialization of unsigned with negative constant [221] */
+		/* expect+1: warning: initialization of unsigned type 'unsigned int:3' with negative constant -4 [221] */
 		{ -4, -4 },
 
-		/* expect+1: warning: initialization of unsigned with negative constant [221] */
+		/* expect+1: warning: initialization of unsigned type 'unsigned int:3' with negative constant -3 [221] */
 		{ -3, -3 },
 
 		{ 3, 3 },

Index: src/tests/usr.bin/xlint/lint1/msg_164.c
diff -u src/tests/usr.bin/xlint/lint1/msg_164.c:1.6 src/tests/usr.bin/xlint/lint1/msg_164.c:1.7
--- src/tests/usr.bin/xlint/lint1/msg_164.c:1.6	Fri Jul  7 19:45:22 2023
+++ src/tests/usr.bin/xlint/lint1/msg_164.c	Sat Jun  8 06:37:06 2024
@@ -1,20 +1,20 @@
-/*	$NetBSD: msg_164.c,v 1.6 2023/07/07 19:45:22 rillig Exp $	*/
+/*	$NetBSD: msg_164.c,v 1.7 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "msg_164.c"
 
-// Test for message: assignment of negative constant to unsigned type [164]
+// Test for message: assignment of negative constant %lld to unsigned type '%s' [164]
 
 /* lint1-extra-flags: -X 351 */
 
 void
 example(void)
 {
-	/* expect+1: warning: initialization of unsigned with negative constant [221] */
+	/* expect+1: warning: initialization of unsigned type 'unsigned char' with negative constant -3 [221] */
 	unsigned char uch = -3;
 
-	/* expect+1: warning: assignment of negative constant to unsigned type [164] */
+	/* expect+1: warning: assignment of negative constant -5 to unsigned type 'unsigned char' [164] */
 	uch = -5;
-	/* expect+1: warning: conversion of negative constant to unsigned type [222] */
+	/* expect+1: warning: conversion of negative constant -7 to unsigned type 'unsigned char' [222] */
 	uch += -7;
-	/* expect+1: warning: conversion of negative constant to unsigned type [222] */
+	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned char' [222] */
 	uch *= -1;
 }
Index: src/tests/usr.bin/xlint/lint1/msg_221.c
diff -u src/tests/usr.bin/xlint/lint1/msg_221.c:1.6 src/tests/usr.bin/xlint/lint1/msg_221.c:1.7
--- src/tests/usr.bin/xlint/lint1/msg_221.c:1.6	Tue Mar 28 14:44:35 2023
+++ src/tests/usr.bin/xlint/lint1/msg_221.c	Sat Jun  8 06:37:06 2024
@@ -1,7 +1,7 @@
-/*	$NetBSD: msg_221.c,v 1.6 2023/03/28 14:44:35 rillig Exp $	*/
+/*	$NetBSD: msg_221.c,v 1.7 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "msg_221.c"
 
-// Test for message: initialization of unsigned with negative constant [221]
+// Test for message: initialization of unsigned type '%s' with negative constant %lld [221]
 
 /* lint1-extra-flags: -X 351 */
 
@@ -9,7 +9,7 @@ struct example {
 	unsigned int a: 5;
 	unsigned int b: 5;
 } example_var = {
-    /* expect+1: warning: initialization of unsigned with negative constant [221] */
+    /* expect+1: warning: initialization of unsigned type 'unsigned int:5' with negative constant -1 [221] */
     -1,
     31
 };

Index: src/tests/usr.bin/xlint/lint1/msg_296.c
diff -u src/tests/usr.bin/xlint/lint1/msg_296.c:1.4 src/tests/usr.bin/xlint/lint1/msg_296.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_296.c:1.4	Tue Mar 28 14:44:35 2023
+++ src/tests/usr.bin/xlint/lint1/msg_296.c	Sat Jun  8 06:37:06 2024
@@ -1,7 +1,7 @@
-/*	$NetBSD: msg_296.c,v 1.4 2023/03/28 14:44:35 rillig Exp $	*/
+/*	$NetBSD: msg_296.c,v 1.5 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "msg_296.c"
 
-// Test for message: conversion of negative constant to unsigned type, arg #%d [296]
+// Test for message: conversion of negative constant %lld to unsigned type '%s', arg #%d [296]
 
 /* lint1-extra-flags: -X 351 */
 
@@ -10,6 +10,6 @@ void take_unsigned_int(unsigned int);
 void
 example(void)
 {
-	/* expect+1: warning: conversion of negative constant to unsigned type, arg #1 [296] */
+	/* expect+1: warning: conversion of negative constant -3 to unsigned type 'unsigned int', arg #1 [296] */
 	take_unsigned_int(-3);
 }
Index: src/tests/usr.bin/xlint/lint1/platform_uchar.c
diff -u src/tests/usr.bin/xlint/lint1/platform_uchar.c:1.4 src/tests/usr.bin/xlint/lint1/platform_uchar.c:1.5
--- src/tests/usr.bin/xlint/lint1/platform_uchar.c:1.4	Sat Dec  2 23:54:49 2023
+++ src/tests/usr.bin/xlint/lint1/platform_uchar.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: platform_uchar.c,v 1.4 2023/12/02 23:54:49 rillig Exp $	*/
+/*	$NetBSD: platform_uchar.c,v 1.5 2024/06/08 06:37:06 rillig Exp $	*/
 # 3 "platform_uchar.c"
 
 /*
@@ -6,7 +6,7 @@
  * representation as unsigned char.
  */
 
-/* lint1-extra-flags: -c -h -a -p -b -r -z -X 161 */
+/* lint1-extra-flags: -c -h -a -p -b -r -z -X 161,351 */
 /* lint1-only-if: uchar */
 
 /* expect+1: warning: nonportable character comparison '< 128' [230] */
@@ -17,3 +17,11 @@ typedef int int_char[(char)127 < (char)'
 typedef int char_int[(char)'\177' < (char)128 ? 1 : -1];
 /* expect+1: warning: nonportable character comparison '< 128' [230] */
 typedef int int_int[(char)127 < (char)128 ? 1 : -1];
+
+
+void
+first_to_upper(char *p)
+{
+	/* expect+1: warning: conversion of negative constant -32 to unsigned type 'char' [222] */
+	*p += 'A' - 'a';
+}

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.244 src/usr.bin/xlint/lint1/err.c:1.245
--- src/usr.bin/xlint/lint1/err.c:1.244	Sun May 12 18:49:36 2024
+++ src/usr.bin/xlint/lint1/err.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.244 2024/05/12 18:49:36 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.245 2024/06/08 06:37:06 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.244 2024/05/12 18:49:36 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.245 2024/06/08 06:37:06 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -219,7 +219,7 @@ static const char *const msgs[] = {
 	"constant in conditional context",				// 161
 	"operator '%s' compares '%s' with '%s'",			// 162
 	"a cast does not yield an lvalue",				// 163
-	"assignment of negative constant to unsigned type",		// 164
+	"assignment of negative constant %lld to unsigned type '%s'",	// 164
 	"constant truncated by assignment",				// 165
 	"precision lost in bit-field assignment",			// 166
 	"array subscript %jd cannot be negative",			// 167
@@ -276,8 +276,8 @@ static const char *const msgs[] = {
 	"C90 treats constant as unsigned, op '%s'",			// 218
 	"concatenated strings are illegal in traditional C",		// 219
 	"fallthrough on case statement",				// 220
-	"initialization of unsigned with negative constant",		// 221
-	"conversion of negative constant to unsigned type",		// 222
+	"initialization of unsigned type '%s' with negative constant %lld", // 221
+	"conversion of negative constant %lld to unsigned type '%s'",	// 222
 	"end-of-loop code not reached",					// 223
 	"cannot recover from previous errors",				// 224
 	"static function '%s' called but not defined",			// 225
@@ -351,7 +351,7 @@ static const char *const msgs[] = {
 	"parameter %d must be 'char *' for PRINTFLIKE/SCANFLIKE",	// 293
 	"multi-character character constant",				// 294
 	"conversion of '%s' to '%s' is out of range, arg #%d",		// 295
-	"conversion of negative constant to unsigned type, arg #%d",	// 296
+	"conversion of negative constant %lld to unsigned type '%s', arg #%d", // 296
 	"conversion to '%s' may sign-extend incorrectly, arg #%d",	// 297
 	"conversion from '%s' to '%s' may lose accuracy, arg #%d",	// 298
 	"prototype does not match old-style definition, arg #%d",	// 299

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.643 src/usr.bin/xlint/lint1/tree.c:1.644
--- src/usr.bin/xlint/lint1/tree.c:1.643	Sun May 12 09:07:41 2024
+++ src/usr.bin/xlint/lint1/tree.c	Sat Jun  8 06:37:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.643 2024/05/12 09:07:41 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.644 2024/06/08 06:37:06 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.643 2024/05/12 09:07:41 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.644 2024/06/08 06:37:06 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -3804,22 +3804,23 @@ convert_constant_check_range_bitand(size
 }
 
 static void
-convert_constant_check_range_signed(op_t op, int arg)
+convert_constant_check_range_signed(op_t op, int arg,
+				    const type_t *ntp, int64_t ov)
 {
 	if (op == ASSIGN)
-		/* assignment of negative constant to unsigned type */
-		warning(164);
+		/* assignment of negative constant %lld to unsigned ... */
+		warning(164, (long long)ov, type_name(ntp));
 	else if (op == INIT)
-		/* initialization of unsigned with negative constant */
-		warning(221);
+		/* initialization of unsigned type '%s' with negative ... */
+		warning(221, type_name(ntp), (long long)ov);
 	else if (op == FARG)
-		/* conversion of negative constant to unsigned type, ... */
-		warning(296, arg);
+		/* conversion of negative constant %lld to unsigned ... */
+		warning(296, (long long)ov, type_name(ntp), arg);
 	else if (modtab[op].m_comparison) {
 		/* handled by check_integer_comparison() */
 	} else
-		/* conversion of negative constant to unsigned type */
-		warning(222);
+		/* conversion of negative constant %lld to unsigned ... */
+		warning(222, (long long)ov, type_name(ntp));
 }
 
 /*
@@ -3902,7 +3903,8 @@ convert_constant_check_range(tspec_t ot,
 	} else if (nt != PTR && is_uinteger(nt) &&
 	    ot != PTR && !is_uinteger(ot) &&
 	    v->u.integer < 0)
-		convert_constant_check_range_signed(op, arg);
+		convert_constant_check_range_signed(op, arg,
+		    tp, v->u.integer);
 	else if (nv->u.integer != v->u.integer && nbitsz <= obitsz &&
 	    (v->u.integer & xmask) != 0 &&
 	    (is_uinteger(ot) || (v->u.integer & xmsk1) != xmsk1))

Reply via email to