Module Name: src
Committed By: rillig
Date: Sun Jan 7 18:42:37 UTC 2024
Modified Files:
src/tests/usr.bin/xlint/lint1: queries.c t_usage.sh
src/usr.bin/xlint/lint1: err.c lex.c
Log Message:
lint: allow querying for invisible characters in literals and constants
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/tests/usr.bin/xlint/lint1/queries.c
cvs rdiff -u -r1.12 -r1.13 src/tests/usr.bin/xlint/lint1/t_usage.sh
cvs rdiff -u -r1.221 -r1.222 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.196 -r1.197 src/usr.bin/xlint/lint1/lex.c
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/queries.c
diff -u src/tests/usr.bin/xlint/lint1/queries.c:1.20 src/tests/usr.bin/xlint/lint1/queries.c:1.21
--- src/tests/usr.bin/xlint/lint1/queries.c:1.20 Sun Dec 10 15:29:38 2023
+++ src/tests/usr.bin/xlint/lint1/queries.c Sun Jan 7 18:42:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: queries.c,v 1.20 2023/12/10 15:29:38 rillig Exp $ */
+/* $NetBSD: queries.c,v 1.21 2024/01/07 18:42:37 rillig Exp $ */
# 3 "queries.c"
/*
@@ -11,11 +11,11 @@
* Understanding how C works internally, by making the usual arithmetic
* conversions visible.
*
- * Finding code that intentionally suppresses a regular lint warning,
- * such as casts between arithmetic types.
+ * Finding code that intentionally suppresses a regular lint warning,
+ * such as casts between arithmetic types.
*/
-/* lint1-extra-flags: -q 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -X 351 */
+/* lint1-extra-flags: -q 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 -X 351 */
typedef unsigned char u8_t;
typedef unsigned short u16_t;
@@ -458,6 +458,11 @@ void Q16(void)
{
}
+/* expect+1: invisible character U+0009 in character constant [Q17] */
+char Q17_char[] = { ' ', '\0', ' ' };
+/* expect+1: invisible character U+0009 in string literal [Q17] */
+char Q17_string[] = " \0 ";
+
/*
* Since queries do not affect the exit status, force a warning to make this
* test conform to the general expectation that a test that produces output
Index: src/tests/usr.bin/xlint/lint1/t_usage.sh
diff -u src/tests/usr.bin/xlint/lint1/t_usage.sh:1.12 src/tests/usr.bin/xlint/lint1/t_usage.sh:1.13
--- src/tests/usr.bin/xlint/lint1/t_usage.sh:1.12 Sun Dec 10 15:29:38 2023
+++ src/tests/usr.bin/xlint/lint1/t_usage.sh Sun Jan 7 18:42:37 2024
@@ -1,4 +1,4 @@
-# $NetBSD: t_usage.sh,v 1.12 2023/12/10 15:29:38 rillig Exp $
+# $NetBSD: t_usage.sh,v 1.13 2024/01/07 18:42:37 rillig Exp $
#
# Copyright (c) 2023 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -89,13 +89,13 @@ enable_queries_body()
# The largest known query.
atf_check \
- "$lint1" -q 16 code.c /dev/null
+ "$lint1" -q 17 code.c /dev/null
# Larger than the largest known query.
atf_check \
-s 'exit:1' \
- -e "inline:lint1: invalid query ID '17'\n" \
- "$lint1" -q 17 code.c /dev/null
+ -e "inline:lint1: invalid query ID '18'\n" \
+ "$lint1" -q 18 code.c /dev/null
# Whitespace is not allowed before a query ID.
atf_check \
Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.221 src/usr.bin/xlint/lint1/err.c:1.222
--- src/usr.bin/xlint/lint1/err.c:1.221 Sun Dec 10 15:29:38 2023
+++ src/usr.bin/xlint/lint1/err.c Sun Jan 7 18:42:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.221 2023/12/10 15:29:38 rillig Exp $ */
+/* $NetBSD: err.c,v 1.222 2024/01/07 18:42:37 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: err.c,v 1.221 2023/12/10 15:29:38 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.222 2024/01/07 18:42:37 rillig Exp $");
#endif
#include <limits.h>
@@ -715,6 +715,7 @@ static const char *queries[] = {
"comparison '%s' of 'char' with plain integer %d", /* Q14 */
"implicit conversion from integer 0 to pointer '%s'", /* Q15 */
"'%s' was declared 'static', now non-'static'", /* Q16 */
+ "invisible character U+%04X in %s", /* Q17 */
};
bool any_query_enabled; /* for optimizing non-query scenarios */
Index: src/usr.bin/xlint/lint1/lex.c
diff -u src/usr.bin/xlint/lint1/lex.c:1.196 src/usr.bin/xlint/lint1/lex.c:1.197
--- src/usr.bin/xlint/lint1/lex.c:1.196 Sun Dec 3 18:17:41 2023
+++ src/usr.bin/xlint/lint1/lex.c Sun Jan 7 18:42:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.196 2023/12/03 18:17:41 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.197 2024/01/07 18:42:37 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: lex.c,v 1.196 2023/12/03 18:17:41 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.197 2024/01/07 18:42:37 rillig Exp $");
#endif
#include <ctype.h>
@@ -868,6 +868,13 @@ get_escaped_char(int delim)
c = read_escaped_backslash(delim);
if (c == -3)
return get_escaped_char(delim);
+ break;
+ default:
+ if (c != ' ' && (isspace(c) || iscntrl(c))) {
+ /* invisible character U+%04X in %s */
+ query_message(17, (unsigned int)c, delim == '"'
+ ? "string literal" : "character constant");
+ }
}
return c;
}