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: add missing warning for bool() == int



details:   https://anonhg.NetBSD.org/src/rev/17f9c6fe4f33
branches:  trunk
changeset: 958671:17f9c6fe4f33
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Jan 16 18:48:52 2021 +0000

description:
lint: add missing warning for bool() == int

diffstat:

 tests/usr.bin/xlint/lint1/d_c99_bool_strict.c   |   6 +++---
 tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp |   1 +
 usr.bin/xlint/lint1/tree.c                      |  21 ++++++++++++++++++---
 3 files changed, 22 insertions(+), 6 deletions(-)

diffs (77 lines):

diff -r 7298d9016890 -r 17f9c6fe4f33 tests/usr.bin/xlint/lint1/d_c99_bool_strict.c
--- a/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c     Sat Jan 16 18:46:59 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c     Sat Jan 16 18:48:52 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: d_c99_bool_strict.c,v 1.11 2021/01/16 17:54:22 rillig Exp $    */
+/*     $NetBSD: d_c99_bool_strict.c,v 1.12 2021/01/16 18:48:52 rillig Exp $    */
 # 3 "d_c99_bool_strict.c"
 
 /*
@@ -710,8 +710,8 @@
 }
 
 
-bool
+void
 strict_bool_operator_eq_bool_int(void)
 {
-       return strict_bool_conversion_return_false() == 0; /* TODO: expect */
+       (void)(strict_bool_conversion_return_false() == 0); /* expect: 107 */
 }
diff -r 7298d9016890 -r 17f9c6fe4f33 tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp
--- a/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp   Sat Jan 16 18:46:59 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp   Sat Jan 16 18:48:52 2021 +0000
@@ -141,3 +141,4 @@
 d_c99_bool_strict.c(670): operands of '=' have incompatible types (_Bool != int) [107]
 d_c99_bool_strict.c(677): operands of '=' have incompatible types (_Bool != int) [107]
 d_c99_bool_strict.c(652): warning: argument flags unused in function strict_bool_bitwise_and_enum [231]
+d_c99_bool_strict.c(716): operands of '==' have incompatible types (_Bool != int) [107]
diff -r 7298d9016890 -r 17f9c6fe4f33 usr.bin/xlint/lint1/tree.c
--- a/usr.bin/xlint/lint1/tree.c        Sat Jan 16 18:46:59 2021 +0000
+++ b/usr.bin/xlint/lint1/tree.c        Sat Jan 16 18:48:52 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tree.c,v 1.159 2021/01/16 18:46:59 rillig Exp $        */
+/*     $NetBSD: tree.c,v 1.160 2021/01/16 18:48:52 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.159 2021/01/16 18:46:59 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.160 2021/01/16 18:48:52 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -1111,6 +1111,21 @@
 }
 
 /*
+ * Whether the operator can handle (bool, bool) as well as (scalar, scalar),
+ * but not mixtures between the two type classes.
+ */
+static bool
+needs_compatible_types(op_t op)
+{
+       return op == EQ || op == NE ||
+              op == AND || op == XOR || op == OR ||
+              op == COLON ||
+              op == ASSIGN || op == ANDASS || op == XORASS || op == ORASS ||
+              op == RETURN ||
+              op == FARG;
+}
+
+/*
  * In strict bool mode, check whether the types of the operands match the
  * operator.
  */
@@ -1132,7 +1147,7 @@
                rt = NOTSPEC;
        }
 
-       if (op == ASSIGN || op == FARG || op == RETURN || op == COLON)
+       if (needs_compatible_types(op))
                return typeok_strict_bool_assign(op, arg, ln, lt, rn, rt);
 
        if (mp->m_takes_only_bool || op == QUEST) {



Home | Main Index | Thread Index | Old Index