Module Name:    src
Committed By:   rillig
Date:           Tue Oct 29 20:48:31 UTC 2024

Modified Files:
        src/tests/usr.bin/xlint/lint1: decl_enum.c msg_056.c msg_348.c
        src/usr.bin/xlint/lint1: decl.c err.c

Log Message:
lint: add details to message about too large integer constant


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/decl_enum.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_056.c
cvs rdiff -u -r1.10 -r1.11 src/tests/usr.bin/xlint/lint1/msg_348.c
cvs rdiff -u -r1.406 -r1.407 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.250 -r1.251 src/usr.bin/xlint/lint1/err.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/decl_enum.c
diff -u src/tests/usr.bin/xlint/lint1/decl_enum.c:1.5 src/tests/usr.bin/xlint/lint1/decl_enum.c:1.6
--- src/tests/usr.bin/xlint/lint1/decl_enum.c:1.5	Wed May  1 12:36:56 2024
+++ src/tests/usr.bin/xlint/lint1/decl_enum.c	Tue Oct 29 20:48:31 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: decl_enum.c,v 1.5 2024/05/01 12:36:56 rillig Exp $	*/
+/*	$NetBSD: decl_enum.c,v 1.6 2024/10/29 20:48:31 rillig Exp $	*/
 # 3 "decl_enum.c"
 
 /*
@@ -10,9 +10,9 @@
 // TIME_MIN thus gets truncated from 0x8000_0000_0000_0000 to 0.
 // TIME_MAX thus gets truncated from 0x7fff_ffff_ffff_ffff to -1.
 enum {
-	/* expect+1: warning: integral constant too large [56] */
+	/* expect+1: warning: constant -0x8000000000000000 too large for 'int' [56] */
 	TIME_MIN = (long long)(1ULL << 63),
-	/* expect+1: warning: integral constant too large [56] */
+	/* expect+1: warning: constant 0x7fffffffffffffff too large for 'int' [56] */
 	TIME_MAX = (long long)~(1ULL << 63),
 };
 

Index: src/tests/usr.bin/xlint/lint1/msg_056.c
diff -u src/tests/usr.bin/xlint/lint1/msg_056.c:1.4 src/tests/usr.bin/xlint/lint1/msg_056.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_056.c:1.4	Wed Jun 15 20:18:31 2022
+++ src/tests/usr.bin/xlint/lint1/msg_056.c	Tue Oct 29 20:48:31 2024
@@ -1,10 +1,39 @@
-/*	$NetBSD: msg_056.c,v 1.4 2022/06/15 20:18:31 rillig Exp $	*/
+/*	$NetBSD: msg_056.c,v 1.5 2024/10/29 20:48:31 rillig Exp $	*/
 # 3 "msg_056.c"
 
-// Test for message: integral constant too large [56]
+// Test for message: constant %s too large for 'int' [56]
 
-enum color {
-	/* expect+1: warning: integer constant out of range [252] */
-	WHITE = 0xFFFFFFFFFFFFFFFFFFFF
+/* lint1-extra-flags: -h */
+
+enum {
+	S31_MAX = 0x7FFFFFFF,
+	U31_MAX = 0x7FFFFFFFU,
+
+	// The hexadecimal constant has type 'int', since it fits.
+	/* expect+1: warning: '2147483647 + 1' overflows 'int' [141] */
+	S31_MAX_PLUS_1 = 0x7FFFFFFF + 1,
+
+	/* expect+1: warning: constant 0x80000000 too large for 'int' [56] */
+	U31_MAX_PLUS_1 = 0x7FFFFFFFU + 1,
+
+
+	/* expect+1: warning: constant 0xffffffff too large for 'int' [56] */
+	U32_MAX = 0xFFFFFFFF,
+
+	/* expect+2: warning: '9223372036854775807 + 1' overflows 'long' [141] */
+	/* expect+1: warning: constant 0x7fffffffffffffff too large for 'int' [56] */
+	S63_MAX_PLUS_1 = 0x7FFFFFFFFFFFFFFF + 1,
+
+	/* expect+1: warning: constant -0x8000000000000000 too large for 'int' [56] */
+	S63_MIN = -0x7FFFFFFFFFFFFFFF - 1,
+
+	/* expect+1: warning: constant 0x7fffffffffffffff too large for 'int' [56] */
+	U63_MAX = 0x7FFFFFFFFFFFFFFF,
+
+	/* expect+1: warning: constant 0xffffffffffffffff too large for 'int' [56] */
+	U64_MAX = 0xFFFFFFFFFFFFFFFF,
+
+	/* expect+2: warning: integer constant out of range [252] */
+	/* expect+1: warning: constant 0xffffffffffffffff too large for 'int' [56] */
+	U80_MAX = 0xFFFFFFFFFFFFFFFFFFFF,
 };
-/* expect-1: warning: integral constant too large [56] */

Index: src/tests/usr.bin/xlint/lint1/msg_348.c
diff -u src/tests/usr.bin/xlint/lint1/msg_348.c:1.10 src/tests/usr.bin/xlint/lint1/msg_348.c:1.11
--- src/tests/usr.bin/xlint/lint1/msg_348.c:1.10	Fri Mar  1 17:22:55 2024
+++ src/tests/usr.bin/xlint/lint1/msg_348.c	Tue Oct 29 20:48:31 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_348.c,v 1.10 2024/03/01 17:22:55 rillig Exp $	*/
+/*	$NetBSD: msg_348.c,v 1.11 2024/10/29 20:48:31 rillig Exp $	*/
 # 3 "msg_348.c"
 
 // Test for message: maximum value %d of '%s' does not match maximum array index %d [348]
@@ -158,9 +158,9 @@ color_name_incomplete_array(enum color c
 }
 
 enum large {
-	/* expect+1: warning: integral constant too large [56] */
+	/* expect+1: warning: constant -0x10000000000 too large for 'int' [56] */
 	min = -1LL << 40,
-	/* expect+1: warning: integral constant too large [56] */
+	/* expect+1: warning: constant 0x10000000000 too large for 'int' [56] */
 	max = 1LL << 40,
 	zero = 0
 };

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.406 src/usr.bin/xlint/lint1/decl.c:1.407
--- src/usr.bin/xlint/lint1/decl.c:1.406	Mon Oct 14 18:43:23 2024
+++ src/usr.bin/xlint/lint1/decl.c	Tue Oct 29 20:48:31 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.406 2024/10/14 18:43:23 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.407 2024/10/29 20:48:31 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: decl.c,v 1.406 2024/10/14 18:43:23 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.407 2024/10/29 20:48:31 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -3171,8 +3171,15 @@ to_int_constant(tnode_t *tn, bool requir
 	bool out_of_bounds = is_unsigned
 	    ? (uint64_t)val > (uint64_t)TARG_INT_MAX
 	    : val > (int64_t)TARG_INT_MAX || val < (int64_t)TARG_INT_MIN;
-	if (out_of_bounds)
-		/* integral constant too large */
-		warning(56);
+	if (out_of_bounds) {
+		char buf[256];
+		unsigned long long abs_val = is_unsigned || val >= 0
+		    ? (unsigned long long)val
+		    : -(unsigned long long)val;
+		snprintf(buf, sizeof(buf), "%s%#llx",
+		    is_unsigned || val >= 0 ? "" : "-",	abs_val);
+		/* constant %s too large for 'int' */
+		warning(56, buf);
+	}
 	return (int)val;
 }

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.250 src/usr.bin/xlint/lint1/err.c:1.251
--- src/usr.bin/xlint/lint1/err.c:1.250	Mon Oct 14 18:43:23 2024
+++ src/usr.bin/xlint/lint1/err.c	Tue Oct 29 20:48:31 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.250 2024/10/14 18:43:23 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.251 2024/10/29 20:48:31 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.250 2024/10/14 18:43:23 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.251 2024/10/29 20:48:31 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -111,7 +111,7 @@ static const char *const msgs[] = {
 	"declared parameter '%s' is missing",				// 53
 	"trailing ',' in enum declaration requires C99 or later",	// 54
 	"integral constant expression expected",			// 55
-	"integral constant too large",					// 56
+	"constant %s too large for 'int'",				// 56
 	"enumeration constant '%s' hides parameter",			// 57
 	"type of '%s' does not match prototype",			// 58
 	"formal parameter #%d lacks name",				// 59

Reply via email to