Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/xlint/lint1 lint: only warn once about integer const...



details:   https://anonhg.NetBSD.org/src/rev/7f82251a5e38
branches:  trunk
changeset: 959917:7f82251a5e38
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon Mar 01 00:51:01 2021 +0000

description:
lint: only warn once about integer constant overflow on 32-bit

Previously, the test msg_056.c warned twice about the integer literal,
but only on 32-bit platforms.  On 64-bit platforms, there was only a
single warning since the integer constant was converted to type
__uint128_t, and this prevented the second warning.  On 32-bit targets,
there is no __uint128_t though.

Fixes part of PR bin/55976.

diffstat:

 usr.bin/xlint/lint1/lex.c |  21 ++++++++++++---------
 1 files changed, 12 insertions(+), 9 deletions(-)

diffs (92 lines):

diff -r 3fb19be1f443 -r 7f82251a5e38 usr.bin/xlint/lint1/lex.c
--- a/usr.bin/xlint/lint1/lex.c Sun Feb 28 23:12:37 2021 +0000
+++ b/usr.bin/xlint/lint1/lex.c Mon Mar 01 00:51:01 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.10 2021/02/28 18:51:51 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.11 2021/03/01 00:51:01 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: lex.c,v 1.10 2021/02/28 18:51:51 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.11 2021/03/01 00:51:01 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -478,6 +478,7 @@
        char    c, *eptr;
        tspec_t typ;
        bool    ansiu;
+       bool    warned = false;
 #ifdef TARG_INT128_MAX
        __uint128_t uq = 0;
        static  tspec_t contypes[2][4] = {
@@ -531,9 +532,11 @@
 
        uq = strtouq(cp, &eptr, base);
        lint_assert(eptr == cp + len);
-       if (errno != 0)
+       if (errno != 0) {
                /* integer constant out of range */
                warning(252);
+               warned = true;
+       }
 
        /*
         * If the value is too big for the current type, we must choose
@@ -550,7 +553,7 @@
                        typ = LONG;
                } else {
                        typ = ULONG;
-                       if (uq > TARG_ULONG_MAX) {
+                       if (uq > TARG_ULONG_MAX && !warned) {
                                /* integer constant out of range */
                                warning(252);
                        }
@@ -570,7 +573,7 @@
        case UINT:
                if (uq > TARG_UINT_MAX) {
                        typ = ULONG;
-                       if (uq > TARG_ULONG_MAX) {
+                       if (uq > TARG_ULONG_MAX && !warned) {
                                /* integer constant out of range */
                                warning(252);
                        }
@@ -581,14 +584,14 @@
                        typ = ULONG;
                        if (!sflag)
                                ansiu = true;
-                       if (uq > TARG_ULONG_MAX) {
+                       if (uq > TARG_ULONG_MAX && !warned) {
                                /* integer constant out of range */
                                warning(252);
                        }
                }
                break;
        case ULONG:
-               if (uq > TARG_ULONG_MAX) {
+               if (uq > TARG_ULONG_MAX && !warned) {
                        /* integer constant out of range */
                        warning(252);
                }
@@ -601,7 +604,7 @@
                }
                break;
        case UQUAD:
-               if (uq > TARG_UQUAD_MAX) {
+               if (uq > TARG_UQUAD_MAX && !warned) {
                        /* integer constant out of range */
                        warning(252);
                }
@@ -618,7 +621,7 @@
                break;
        case UINT128:
 #ifdef TARG_INT128_MAX
-               if (uq > TARG_UINT128_MAX) {
+               if (uq > TARG_UINT128_MAX && !warned) {
                        /* integer constant out of range */
                        warning(252);
                }



Home | Main Index | Thread Index | Old Index