Module Name: src
Committed By: rillig
Date: Tue Nov 16 18:27:04 UTC 2021
Modified Files:
src/tests/usr.bin/xlint/lint1: d_c99_bool_strict.c
d_c99_bool_strict.exp
src/usr.bin/xlint/lint1: cgram.y
Log Message:
lint: fix wrong error message in strict bool mode
This fix only affects the last token before a macro, as well as the last
token in the expanded macro.
To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c
cvs rdiff -u -r1.30 -r1.31 \
src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp
cvs rdiff -u -r1.368 -r1.369 src/usr.bin/xlint/lint1/cgram.y
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.c
diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c:1.32 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c:1.33
--- src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c:1.32 Tue Nov 16 06:55:03 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c Tue Nov 16 18:27:04 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: d_c99_bool_strict.c,v 1.32 2021/11/16 06:55:03 rillig Exp $ */
+/* $NetBSD: d_c99_bool_strict.c,v 1.33 2021/11/16 18:27:04 rillig Exp $ */
# 3 "d_c99_bool_strict.c"
/*
@@ -838,14 +838,14 @@ controlling_expression(FILE *f, const ch
return;
/*
- * FIXME: At the end of parsing the name 'stdio_stdout', the parser
- * has already looked ahead to the next token, to see whether it is
- * a '(' of a function call. At that point, the parser is no longer
- * in a system header, therefore 'stdio_stdout' is not tn_relaxed,
- * and this information is pushed down to the whole function call
- * expression.
+ * Before cgram.y 1.369 from 2021-11-16, at the end of parsing the
+ * name 'stdio_stdout', the parser already looked ahead to the next
+ * token, to see whether it was the '(' of a function call. At that
+ * point, the parser was no longer in a system header, therefore
+ * 'stdio_stdout' was not tn_relaxed, and this information was pushed
+ * down to the whole function call expression (which was another bug
+ * at that time).
*/
- /* expect+5: error: controlling expression must be bool, not 'int' [333] */
if (ferror(
# 851 "d_c99_bool_strict.c" 3 4
stdio_stdout
@@ -867,12 +867,12 @@ controlling_expression(FILE *f, const ch
return;
/*
- * A comment following 'stdio_stdout' does not prevent the search for
- * '('. At the point where build_name calls expr_zalloc_tnode, the
- * parser is already in the main file again, thus treating
- * stdio_stdout as not coming from a system header.
+ * Before cgram.y 1.369 from 2021-11-16, the comment following
+ * 'stdio_stdout' did not prevent the search for '('. At the point
+ * where build_name calls expr_zalloc_tnode, the parser was already
+ * in the main file again, thus treating 'stdio_stdout' as not coming
+ * from a system header.
*/
- /* expect+5: error: controlling expression must be bool, not 'int' [333] */
if (ferror(
# 878 "d_c99_bool_strict.c" 3 4
stdio_stdout /* comment */
Index: src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp
diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp:1.30 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp:1.31
--- src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp:1.30 Tue Nov 16 06:55:03 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp Tue Nov 16 18:27:04 2021
@@ -171,5 +171,3 @@ d_c99_bool_strict.c(805): error: control
d_c99_bool_strict.c(808): error: controlling expression must be bool, not 'int' [333]
d_c99_bool_strict.c(811): error: operand of '!' must be bool, not 'int' [330]
d_c99_bool_strict.c(814): error: operand of '!' must be bool, not 'int' [330]
-d_c99_bool_strict.c(853): error: controlling expression must be bool, not 'int' [333]
-d_c99_bool_strict.c(880): error: controlling expression must be bool, not 'int' [333]
Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.368 src/usr.bin/xlint/lint1/cgram.y:1.369
--- src/usr.bin/xlint/lint1/cgram.y:1.368 Tue Nov 16 17:41:23 2021
+++ src/usr.bin/xlint/lint1/cgram.y Tue Nov 16 18:27:04 2021
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.368 2021/11/16 17:41:23 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.369 2021/11/16 18:27:04 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: cgram.y,v 1.368 2021/11/16 17:41:23 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.369 2021/11/16 18:27:04 rillig Exp $");
#endif
#include <limits.h>
@@ -420,10 +420,14 @@ string2:
/* K&R 7.1, C90 ???, C99 6.5.1, C11 6.5.1 */
primary_expression:
T_NAME {
- /* XXX really necessary? */
+ bool sys_name, sys_next;
+ sys_name = in_system_header;
if (yychar < 0)
yychar = yylex();
+ sys_next = in_system_header;
+ in_system_header = sys_name;
$$ = build_name(getsym($1), yychar);
+ in_system_header = sys_next;
}
| T_CON {
$$ = build_constant(gettyp($1->v_tspec), $1);