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]