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