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