Module Name: src
Committed By: rillig
Date: Thu May 19 17:10:50 UTC 2022
Modified Files:
src/tests/usr.bin/xlint/lint1: d_c99_bool_strict_syshdr.c
d_c99_bool_strict_syshdr.exp
Log Message:
tests/lint: extend tests for type mismatch in strict bool mode
Seen in games/gomoku when calling curses functions.
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c
cvs rdiff -u -r1.14 -r1.15 \
src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp
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/d_c99_bool_strict_syshdr.c
diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c:1.12 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c:1.13
--- src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c:1.12 Wed Dec 22 15:36:37 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c Thu May 19 17:10:50 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: d_c99_bool_strict_syshdr.c,v 1.12 2021/12/22 15:36:37 rillig Exp $ */
+/* $NetBSD: d_c99_bool_strict_syshdr.c,v 1.13 2022/05/19 17:10:50 rillig Exp $ */
# 3 "d_c99_bool_strict_syshdr.c"
/*
@@ -193,13 +193,57 @@ controlling_expression_with_comma_operat
int c;
while (c = read_char(),
-# 191 "c_c99_bool_strict_syshdr.c" 3 4
+# 197 "d_c99_bool_strict_syshdr.c" 3 4
((int)((ctype_table + 1)[(
-# 193 "c_c99_bool_strict_syshdr.c"
+# 199 "d_c99_bool_strict_syshdr.c"
c
-# 195 "c_c99_bool_strict_syshdr.c" 3 4
+# 201 "d_c99_bool_strict_syshdr.c" 3 4
)] & 0x0040 /* Space */))
-# 197 "c_c99_bool_strict_syshdr.c"
+# 203 "d_c99_bool_strict_syshdr.c"
)
continue;
}
+
+
+void take_bool(_Bool);
+
+/*
+ * On NetBSD, the header <curses.h> defines TRUE or FALSE as integer
+ * constants with a CONSTCOND comment. This comment suppresses legitimate
+ * warnings in user code; that's irrelevant for this test though.
+ *
+ * Several curses functions take bool as a parameter, for example keypad or
+ * leaveok. As of 2022-05-19, lint does not complain when these functions
+ * get 0 instead of 'false' as an argument. It does complain about 1 instead
+ * of 'true' though.
+ */
+void
+pass_bool_to_function(void)
+{
+
+ /* expect+5: error: argument #1 expects '_Bool', gets passed 'int' [334] */
+ take_bool(
+# 227 "d_c99_bool_strict_syshdr.c" 3 4
+ (/*CONSTCOND*/1)
+# 229 "d_c99_bool_strict_syshdr.c"
+ );
+
+ take_bool(
+# 233 "d_c99_bool_strict_syshdr.c" 3 4
+ __lint_true
+# 235 "d_c99_bool_strict_syshdr.c"
+ );
+
+ /* TODO: make this a type error */
+ take_bool(
+# 240 "d_c99_bool_strict_syshdr.c" 3 4
+ (/*CONSTCOND*/0)
+# 242 "d_c99_bool_strict_syshdr.c"
+ );
+
+ take_bool(
+# 246 "d_c99_bool_strict_syshdr.c" 3 4
+ __lint_false
+# 248 "d_c99_bool_strict_syshdr.c"
+ );
+}
Index: src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp
diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp:1.14 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp:1.15
--- src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp:1.14 Wed Dec 22 15:36:37 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp Thu May 19 17:10:50 2022
@@ -4,3 +4,4 @@ d_c99_bool_strict_syshdr.c(80): error: o
d_c99_bool_strict_syshdr.c(157): error: return value type mismatch (_Bool) and (int) [211]
d_c99_bool_strict_syshdr.c(172): error: operand of '!' must be bool, not 'int' [330]
d_c99_bool_strict_syshdr.c(172): warning: function 'str_equal_bad' expects to return value [214]
+d_c99_bool_strict_syshdr.c(229): error: argument #1 expects '_Bool', gets passed 'int' [334]