Module Name: src
Committed By: rillig
Date: Thu Aug 19 20:48:48 UTC 2021
Modified Files:
src/tests/usr.bin/xlint/lint1: expr_fold.c expr_fold.exp
src/usr.bin/xlint/lint1: tree.c
Log Message:
lint: fix wrong integer overflow warning for unsigned types
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/expr_fold.c \
src/tests/usr.bin/xlint/lint1/expr_fold.exp
cvs rdiff -u -r1.337 -r1.338 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/expr_fold.c
diff -u src/tests/usr.bin/xlint/lint1/expr_fold.c:1.1 src/tests/usr.bin/xlint/lint1/expr_fold.c:1.2
--- src/tests/usr.bin/xlint/lint1/expr_fold.c:1.1 Thu Aug 19 20:32:33 2021
+++ src/tests/usr.bin/xlint/lint1/expr_fold.c Thu Aug 19 20:48:47 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: expr_fold.c,v 1.1 2021/08/19 20:32:33 rillig Exp $ */
+/* $NetBSD: expr_fold.c,v 1.2 2021/08/19 20:48:47 rillig Exp $ */
# 3 "expr_fold.c"
/*
@@ -175,9 +175,9 @@ fold_plus(void)
* other operand is converted to unsigned as well.
* See C99 6.3.1.8p1, paragraph 8 of 10.
*/
- /*FIXME*//* expect+1: warning: integer overflow detected, op + [141] */
+ /* wrong integer overflow warning before tree.c 1.338 from 2021-08-19 */
take_uint(2147483647 + 1U);
- /*FIXME*//* expect+1: warning: integer overflow detected, op + [141] */
+ /* wrong integer overflow warning before tree.c 1.338 from 2021-08-19 */
take_uint(2147483647U + 1);
}
Index: src/tests/usr.bin/xlint/lint1/expr_fold.exp
diff -u src/tests/usr.bin/xlint/lint1/expr_fold.exp:1.1 src/tests/usr.bin/xlint/lint1/expr_fold.exp:1.2
--- src/tests/usr.bin/xlint/lint1/expr_fold.exp:1.1 Thu Aug 19 20:32:33 2021
+++ src/tests/usr.bin/xlint/lint1/expr_fold.exp Thu Aug 19 20:48:47 2021
@@ -43,8 +43,6 @@ expr_fold.c(155): error: modulus by 0 [1
expr_fold.c(158): warning: argument #1 is converted from 'long' to 'int' due to prototype [259]
expr_fold.c(165): warning: integer overflow detected, op + [141]
expr_fold.c(171): warning: integer overflow detected, op + [141]
-expr_fold.c(179): warning: integer overflow detected, op + [141]
-expr_fold.c(181): warning: integer overflow detected, op + [141]
expr_fold.c(188): warning: integer overflow detected, op - [141]
expr_fold.c(192): warning: integer overflow detected, op - [141]
expr_fold.c(195): warning: argument #1 is converted from 'long' to 'int' due to prototype [259]
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.337 src/usr.bin/xlint/lint1/tree.c:1.338
--- src/usr.bin/xlint/lint1/tree.c:1.337 Mon Aug 16 18:51:03 2021
+++ src/usr.bin/xlint/lint1/tree.c Thu Aug 19 20:48:47 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.337 2021/08/16 18:51:03 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.338 2021/08/19 20:48:47 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tree.c,v 1.337 2021/08/16 18:51:03 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.338 2021/08/19 20:48:47 rillig Exp $");
#endif
#include <float.h>
@@ -3072,7 +3072,7 @@ fold(tnode_t *tn)
if (msb(q, t, -1) == 0)
ovfl = true;
} else if (msb(sl, t, -1) == 0 && msb(sr, t, -1) == 0) {
- if (msb(q, t, -1) != 0)
+ if (msb(q, t, -1) != 0 && !utyp)
ovfl = true;
}
break;