Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tests/usr.bin/xlint/lint1 lint: improve introduction of test...
details: https://anonhg.NetBSD.org/src/rev/e4f3ed0405f3
branches: trunk
changeset: 980104:e4f3ed0405f3
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Jan 24 09:18:42 2021 +0000
description:
lint: improve introduction of test d_c99_bool_strict_syshdr
diffstat:
tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c | 51 ++++++++++-------
tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp | 12 ++--
2 files changed, 37 insertions(+), 26 deletions(-)
diffs (132 lines):
diff -r 8e4a5c2311de -r e4f3ed0405f3 tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c
--- a/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c Sun Jan 24 07:58:48 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.c Sun Jan 24 09:18:42 2021 +0000
@@ -1,11 +1,22 @@
-/* $NetBSD: d_c99_bool_strict_syshdr.c,v 1.7 2021/01/24 07:58:48 rillig Exp $ */
+/* $NetBSD: d_c99_bool_strict_syshdr.c,v 1.8 2021/01/24 09:18:42 rillig Exp $ */
# 3 "d_c99_bool_strict_syshdr.c"
/*
- * Macros from system headers may use int expressions where bool expressions
- * are expected. These headers are not allowed to include <stdbool.h>
- * themselves, and even if they could, lint must accept other scalar types
- * as well, since system headers are not changed lightheartedly.
+ * In strict bool mode, lint treats bool as incompatible with any other scalar
+ * types. This mode helps in migrating code from pre-C99 to C99.
+ *
+ * System headers, on the other hand, cannot be migrated if they need to stay
+ * compatible with pre-C99 code. Therefore, the checks for system headers are
+ * loosened. In contexts where a scalar expression is compared to 0, macros
+ * and functions from system headers may use int expressions as well.
+ *
+ * These headers are not allowed to include <stdbool.h>[references needed].
+ * Doing so would inject lint's own <stdbool.h>, which defines the macros
+ * false and true to other identifiers instead of the plain 0 and 1, thereby
+ * allowing to see whether the code really uses true and false as identifiers.
+ *
+ * Since the system headers cannot include <stdbool.h>, they need to use the
+ * traditional bool constants 0 and 1.
*/
/* lint1-extra-flags: -T */
@@ -31,12 +42,12 @@
println("nothing");
} while (/*CONSTCOND*/0); /* expect: 333 */
-# 35 "d_c99_bool_strict_syshdr.c" 3 4
+# 46 "d_c99_bool_strict_syshdr.c" 3 4
do {
println("nothing");
} while (/*CONSTCOND*/0); /* ok */
-# 40 "d_c99_bool_strict_syshdr.c"
+# 51 "d_c99_bool_strict_syshdr.c"
do {
println("nothing");
} while (/*CONSTCOND*/0); /* expect: 333 */
@@ -70,28 +81,28 @@
* All other combinations of type are safe from truncation.
*/
_Bool system_int_assigned_to_bool =
-# 74 "d_c99_bool_strict_syshdr.c" 3 4
+# 85 "d_c99_bool_strict_syshdr.c" 3 4
(int)((ctype_table + 1)[c] & 0x0040) /* INT */
-# 76 "d_c99_bool_strict_syshdr.c"
+# 87 "d_c99_bool_strict_syshdr.c"
; /* expect: 107 */
int system_bool_assigned_to_int =
-# 80 "d_c99_bool_strict_syshdr.c" 3 4
+# 91 "d_c99_bool_strict_syshdr.c" 3 4
(int)((ctype_table + 1)[c] & 0x0040) != 0 /* BOOL */
-# 82 "d_c99_bool_strict_syshdr.c"
+# 93 "d_c99_bool_strict_syshdr.c"
;
if (
-# 86 "d_c99_bool_strict_syshdr.c" 3 4
+# 97 "d_c99_bool_strict_syshdr.c" 3 4
(int)((ctype_table + 1)[c] & 0x0040) /* INT */
-# 88 "d_c99_bool_strict_syshdr.c"
+# 99 "d_c99_bool_strict_syshdr.c"
)
println("system macro returning INT");
if (
-# 93 "d_c99_bool_strict_syshdr.c" 3 4
+# 104 "d_c99_bool_strict_syshdr.c" 3 4
((ctype_table + 1)[c] & 0x0040) != 0 /* BOOL */
-# 95 "d_c99_bool_strict_syshdr.c"
+# 106 "d_c99_bool_strict_syshdr.c"
)
println("system macro returning BOOL");
}
@@ -100,9 +111,9 @@
ch_isspace_sys_int(char c)
{
return
-# 104 "d_c99_bool_strict_syshdr.c" 3 4
+# 115 "d_c99_bool_strict_syshdr.c" 3 4
((ctype_table + 1)[c] & 0x0040)
-# 106 "d_c99_bool_strict_syshdr.c"
+# 117 "d_c99_bool_strict_syshdr.c"
!= 0;
}
@@ -115,9 +126,9 @@
ch_isspace_sys_bool(char c)
{
return
-# 119 "d_c99_bool_strict_syshdr.c" 3 4
+# 130 "d_c99_bool_strict_syshdr.c" 3 4
((ctype_table + 1)[(unsigned char)c] & 0x0040) != 0
-# 121 "d_c99_bool_strict_syshdr.c"
+# 132 "d_c99_bool_strict_syshdr.c"
!= 0;
}
@@ -142,7 +153,7 @@
extern int finite(double);
# 1 "string.h" 3 4
extern int strcmp(const char *, const char *);
-# 146 "d_c99_bool_strict_syshdr.c"
+# 157 "d_c99_bool_strict_syshdr.c"
/*ARGSUSED*/
_Bool
diff -r 8e4a5c2311de -r e4f3ed0405f3 tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp
--- a/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp Sun Jan 24 07:58:48 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_bool_strict_syshdr.exp Sun Jan 24 09:18:42 2021 +0000
@@ -1,6 +1,6 @@
-d_c99_bool_strict_syshdr.c(32): controlling expression must be bool, not 'int' [333]
-d_c99_bool_strict_syshdr.c(42): controlling expression must be bool, not 'int' [333]
-d_c99_bool_strict_syshdr.c(76): operands of '=' have incompatible types (_Bool != int) [107]
-d_c99_bool_strict_syshdr.c(151): return value type mismatch (_Bool) and (int) [211]
-d_c99_bool_strict_syshdr.c(164): operand of '!' must be bool, not 'int' [330]
-d_c99_bool_strict_syshdr.c(164): warning: function str_equal_bad expects to return value [214]
+d_c99_bool_strict_syshdr.c(43): controlling expression must be bool, not 'int' [333]
+d_c99_bool_strict_syshdr.c(53): controlling expression must be bool, not 'int' [333]
+d_c99_bool_strict_syshdr.c(87): operands of '=' have incompatible types (_Bool != int) [107]
+d_c99_bool_strict_syshdr.c(162): return value type mismatch (_Bool) and (int) [211]
+d_c99_bool_strict_syshdr.c(175): operand of '!' must be bool, not 'int' [330]
+d_c99_bool_strict_syshdr.c(175): warning: function str_equal_bad expects to return value [214]
Home |
Main Index |
Thread Index |
Old Index