Module Name: src
Committed By: rillig
Date: Sun Sep 5 19:16:38 UTC 2021
Modified Files:
src/tests/usr.bin/xlint: check-expect.lua
src/tests/usr.bin/xlint/lint1: msg_280.c msg_280.exp
Log Message:
tests/lint: document placement of lint comments
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/tests/usr.bin/xlint/check-expect.lua
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_280.c \
src/tests/usr.bin/xlint/lint1/msg_280.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/check-expect.lua
diff -u src/tests/usr.bin/xlint/check-expect.lua:1.12 src/tests/usr.bin/xlint/check-expect.lua:1.13
--- src/tests/usr.bin/xlint/check-expect.lua:1.12 Sat Aug 21 07:49:48 2021
+++ src/tests/usr.bin/xlint/check-expect.lua Sun Sep 5 19:16:37 2021
@@ -1,5 +1,5 @@
#! /usr/bin/lua
--- $NetBSD: check-expect.lua,v 1.12 2021/08/21 07:49:48 rillig Exp $
+-- $NetBSD: check-expect.lua,v 1.13 2021/09/05 19:16:37 rillig Exp $
--[[
@@ -105,10 +105,11 @@ local function check_test(c_fname, error
for _, act in ipairs(messages) do
local exp = comments_by_location[act.location] or {}
+ local exp_comment = act.message:gsub("/%*", "**"):gsub("%*/", "**")
local found = false
for i, message in ipairs(exp) do
- if message ~= "" and act.message:find(message, 1, true) then
+ if message ~= "" and exp_comment:find(message, 1, true) then
exp[i] = ""
found = true
break
@@ -116,7 +117,7 @@ local function check_test(c_fname, error
end
if not found then
- errors:add("error: %s: missing /* expect+1: %s */", act.location, act.message)
+ errors:add("error: %s: missing /* expect+1: %s */", act.location, exp_comment)
end
end
Index: src/tests/usr.bin/xlint/lint1/msg_280.c
diff -u src/tests/usr.bin/xlint/lint1/msg_280.c:1.4 src/tests/usr.bin/xlint/lint1/msg_280.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_280.c:1.4 Sun Sep 5 18:39:58 2021
+++ src/tests/usr.bin/xlint/lint1/msg_280.c Sun Sep 5 19:16:37 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_280.c,v 1.4 2021/09/05 18:39:58 rillig Exp $ */
+/* $NetBSD: msg_280.c,v 1.5 2021/09/05 19:16:37 rillig Exp $ */
# 3 "msg_280.c"
// Test for message: must be outside function: /* %s */ [280]
@@ -10,25 +10,42 @@ varargs_ok(const char *str, ...)
(void)str;
}
+/*
+ * In the following example, the comment looks misplaced, but lint does not
+ * warn about it.
+ *
+ * This is due to the implementation of the parser and the C grammar. When
+ * the parser sees the token T_LPAREN, it has to decide whether the following
+ * tokens will form a parameter type list or an identifier list. For that,
+ * it needs to look at the next token to see whether it is a T_NAME (in which
+ * case the T_LPAREN belongs to an id_list_lparen) or something else (in
+ * which case the T_LPAREN belongs to an abstract_decl_lparen). This token
+ * lookahead happens just before either of these grammar rules is reduced.
+ * During that reduction, the current declaration context switches from
+ * 'extern' to 'prototype argument', which makes this exact position the very
+ * last possible. Everything later would already be in the wrong context.
+ *
+ * As of cgram.y 1.360 from 2021-09-04, the implementation of these grammar
+ * rules is exactly the same, which makes it tempting to join them into a
+ * single rule.
+ */
void
-/* XXX: Why is this comment considered 'outside' enough? */
varargs_bad_param(/* VARARGS */ const char *str, ...)
{
(void)str;
}
void
-/* expect+1: warning: must be outside function: */
+/* expect+1: warning: must be outside function: ** VARARGS ** [280] */
varargs_bad_ellipsis(const char *str, /* VARARGS */ ...)
{
(void)str;
}
void
-/* XXX: Why is this comment considered 'outside' enough? */
varargs_bad_body(const char *str, ...)
{
- /* expect+1: warning: must be outside function */
+ /* expect+1: warning: must be outside function: ** VARARGS ** [280] */
/* VARARGS */
(void)str;
}
@@ -37,14 +54,14 @@ void
/* expect+1: warning: argument 'str' unused in function 'argsused_bad_body' [231] */
argsused_bad_body(const char *str)
{
- /* expect+1: warning: must be outside function */
+ /* expect+1: warning: must be outside function: ** ARGSUSED ** [280] */
/* ARGSUSED */
}
void
printflike_bad_body(const char *fmt, ...)
{
- /* expect+1: warning: must be outside function */
+ /* expect+1: warning: must be outside function: ** PRINTFLIKE ** [280] */
/* PRINTFLIKE */
(void)fmt;
}
@@ -52,7 +69,7 @@ printflike_bad_body(const char *fmt, ...
void
scanflike_bad_body(const char *fmt, ...)
{
- /* expect+1: warning: must be outside function */
+ /* expect+1: warning: must be outside function: ** SCANFLIKE ** [280] */
/* SCANFLIKE */
(void)fmt;
}
Index: src/tests/usr.bin/xlint/lint1/msg_280.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_280.exp:1.4 src/tests/usr.bin/xlint/lint1/msg_280.exp:1.5
--- src/tests/usr.bin/xlint/lint1/msg_280.exp:1.4 Sun Sep 5 18:39:58 2021
+++ src/tests/usr.bin/xlint/lint1/msg_280.exp Sun Sep 5 19:16:37 2021
@@ -1,6 +1,6 @@
-msg_280.c(22): warning: must be outside function: /* VARARGS */ [280]
-msg_280.c(32): warning: must be outside function: /* VARARGS */ [280]
-msg_280.c(41): warning: must be outside function: /* ARGSUSED */ [280]
-msg_280.c(38): warning: argument 'str' unused in function 'argsused_bad_body' [231]
-msg_280.c(48): warning: must be outside function: /* PRINTFLIKE */ [280]
-msg_280.c(56): warning: must be outside function: /* SCANFLIKE */ [280]
+msg_280.c(40): warning: must be outside function: /* VARARGS */ [280]
+msg_280.c(49): warning: must be outside function: /* VARARGS */ [280]
+msg_280.c(58): warning: must be outside function: /* ARGSUSED */ [280]
+msg_280.c(55): warning: argument 'str' unused in function 'argsused_bad_body' [231]
+msg_280.c(65): warning: must be outside function: /* PRINTFLIKE */ [280]
+msg_280.c(73): warning: must be outside function: /* SCANFLIKE */ [280]