From: Greg Price <price@MIT.EDU>
To: Al Viro <viro@ZenIV.linux.org.uk>, Christopher Li <sparse@chrisli.org>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
linux-sparse@vger.kernel.org,
linux-mtd <linux-mtd@lists.infradead.org>,
Joe Perches <joe@perches.com>, dwmw2 <dwmw2@infradead.org>,
Erico Nunes <nunes.erico@gmail.com>
Subject: [PATCH] Clarify error on directive in macro arguments (Re: [PATCH] jffs2: fix sparse errors: directive in argument list)
Date: Sun, 17 Nov 2013 21:07:46 -0500 [thread overview]
Message-ID: <20131118020746.GX16018@ringworld.MIT.EDU> (raw)
In-Reply-To: <20131118013349.GM13318@ZenIV.linux.org.uk>
[+linux-sparse and Chris]
On Mon, Nov 18, 2013 at 01:33:49AM +0000, Al Viro wrote:
> On Sun, Nov 17, 2013 at 02:45:05PM -0800, Joe Perches wrote:
> > Yes. I think it's a defect in how sparse
> > treats string concatenation.
> >
> > That style [... with printk ...] is pretty common in the kernel sources.
>
> ... and it's perfectly fine, until somebody starts playing in nasal
> daemon country and do that in *macro* arguments. And a nasal daemon
> country it is - it's an undefined behaviour. See 6.10.3p11 in C99.
> And trying to define a semantics for that gets real ugly real fast.
> sparse matches gcc behaviour (I hope), but it warns about such abuses.
> It's a defect, all right - one being reported by sparse.
Perhaps the following tweak to the error message would make this
subtlety clearer?
Cheers,
Greg
From: Greg Price <price@mit.edu>
Date: Sun, 17 Nov 2013 17:57:41 -0800
Subject: [PATCH] Clarify error on directive in macro arguments
Preprocessor directives in the arguments of a real function
are innocuous and in some contexts common. If a developer
doesn't realize that a "function" is implemented as a macro,
they may mistake this error for a false alarm.
See http://www.spinics.net/lists/kernel/msg1636974.html
and http://www.spinics.net/lists/kernel/msg1636976.html
for an example.
Easy enough to clarify that this is a macro, so do it.
Signed-off-by: Greg Price <price@mit.edu>
---
pre-process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pre-process.c b/pre-process.c
index d521318..db58a97 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -204,7 +204,7 @@ static struct token *collect_arg(struct token *prev, int vararg, struct position
if (next->pos.newline && match_op(next, '#')) {
if (!next->pos.noexpand) {
sparse_error(next->pos,
- "directive in argument list");
+ "directive in macro argument list");
preprocessor_line(stream, p);
__free_token(next); /* Free the '#' token */
continue;
--
1.8.3.2
WARNING: multiple messages have this Message-ID (diff)
From: Greg Price <price@MIT.EDU>
To: Al Viro <viro@ZenIV.linux.org.uk>, Christopher Li <sparse@chrisli.org>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
linux-sparse@vger.kernel.org,
linux-mtd <linux-mtd@lists.infradead.org>,
Joe Perches <joe@perches.com>, dwmw2 <dwmw2@infradead.org>,
Erico Nunes <nunes.erico@gmail.com>
Subject: [PATCH] Clarify error on directive in macro arguments (Re: [PATCH] jffs2: fix sparse errors: directive in argument list)
Date: Sun, 17 Nov 2013 21:07:46 -0500 [thread overview]
Message-ID: <20131118020746.GX16018@ringworld.MIT.EDU> (raw)
In-Reply-To: <20131118013349.GM13318@ZenIV.linux.org.uk>
[+linux-sparse and Chris]
On Mon, Nov 18, 2013 at 01:33:49AM +0000, Al Viro wrote:
> On Sun, Nov 17, 2013 at 02:45:05PM -0800, Joe Perches wrote:
> > Yes. I think it's a defect in how sparse
> > treats string concatenation.
> >
> > That style [... with printk ...] is pretty common in the kernel sources.
>
> ... and it's perfectly fine, until somebody starts playing in nasal
> daemon country and do that in *macro* arguments. And a nasal daemon
> country it is - it's an undefined behaviour. See 6.10.3p11 in C99.
> And trying to define a semantics for that gets real ugly real fast.
> sparse matches gcc behaviour (I hope), but it warns about such abuses.
> It's a defect, all right - one being reported by sparse.
Perhaps the following tweak to the error message would make this
subtlety clearer?
Cheers,
Greg
From: Greg Price <price@mit.edu>
Date: Sun, 17 Nov 2013 17:57:41 -0800
Subject: [PATCH] Clarify error on directive in macro arguments
Preprocessor directives in the arguments of a real function
are innocuous and in some contexts common. If a developer
doesn't realize that a "function" is implemented as a macro,
they may mistake this error for a false alarm.
See http://www.spinics.net/lists/kernel/msg1636974.html
and http://www.spinics.net/lists/kernel/msg1636976.html
for an example.
Easy enough to clarify that this is a macro, so do it.
Signed-off-by: Greg Price <price@mit.edu>
---
pre-process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pre-process.c b/pre-process.c
index d521318..db58a97 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -204,7 +204,7 @@ static struct token *collect_arg(struct token *prev, int vararg, struct position
if (next->pos.newline && match_op(next, '#')) {
if (!next->pos.noexpand) {
sparse_error(next->pos,
- "directive in argument list");
+ "directive in macro argument list");
preprocessor_line(stream, p);
__free_token(next); /* Free the '#' token */
continue;
--
1.8.3.2
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Greg Price <price@MIT.EDU>
To: Al Viro <viro@ZenIV.linux.org.uk>, Christopher Li <sparse@chrisli.org>
Cc: Joe Perches <joe@perches.com>,
Erico Nunes <nunes.erico@gmail.com>,
linux-sparse@vger.kernel.org, dwmw2 <dwmw2@infradead.org>,
linux-mtd <linux-mtd@lists.infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: [PATCH] Clarify error on directive in macro arguments (Re: [PATCH] jffs2: fix sparse errors: directive in argument list)
Date: Sun, 17 Nov 2013 21:07:46 -0500 [thread overview]
Message-ID: <20131118020746.GX16018@ringworld.MIT.EDU> (raw)
In-Reply-To: <20131118013349.GM13318@ZenIV.linux.org.uk>
[+linux-sparse and Chris]
On Mon, Nov 18, 2013 at 01:33:49AM +0000, Al Viro wrote:
> On Sun, Nov 17, 2013 at 02:45:05PM -0800, Joe Perches wrote:
> > Yes. I think it's a defect in how sparse
> > treats string concatenation.
> >
> > That style [... with printk ...] is pretty common in the kernel sources.
>
> ... and it's perfectly fine, until somebody starts playing in nasal
> daemon country and do that in *macro* arguments. And a nasal daemon
> country it is - it's an undefined behaviour. See 6.10.3p11 in C99.
> And trying to define a semantics for that gets real ugly real fast.
> sparse matches gcc behaviour (I hope), but it warns about such abuses.
> It's a defect, all right - one being reported by sparse.
Perhaps the following tweak to the error message would make this
subtlety clearer?
Cheers,
Greg
From: Greg Price <price@mit.edu>
Date: Sun, 17 Nov 2013 17:57:41 -0800
Subject: [PATCH] Clarify error on directive in macro arguments
Preprocessor directives in the arguments of a real function
are innocuous and in some contexts common. If a developer
doesn't realize that a "function" is implemented as a macro,
they may mistake this error for a false alarm.
See http://www.spinics.net/lists/kernel/msg1636974.html
and http://www.spinics.net/lists/kernel/msg1636976.html
for an example.
Easy enough to clarify that this is a macro, so do it.
Signed-off-by: Greg Price <price@mit.edu>
---
pre-process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pre-process.c b/pre-process.c
index d521318..db58a97 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -204,7 +204,7 @@ static struct token *collect_arg(struct token *prev, int vararg, struct position
if (next->pos.newline && match_op(next, '#')) {
if (!next->pos.noexpand) {
sparse_error(next->pos,
- "directive in argument list");
+ "directive in macro argument list");
preprocessor_line(stream, p);
__free_token(next); /* Free the '#' token */
continue;
--
1.8.3.2
next prev parent reply other threads:[~2013-11-18 2:08 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-17 20:18 [PATCH] jffs2: fix sparse errors: directive in argument list Erico Nunes
2013-11-17 21:40 ` Joe Perches
2013-11-17 21:40 ` Joe Perches
2013-11-17 21:40 ` Joe Perches
2013-11-17 22:34 ` Erico Nunes
2013-11-17 22:34 ` Erico Nunes
2013-11-17 22:34 ` Erico Nunes
2013-11-17 22:43 ` Erico Nunes
2013-11-17 22:43 ` Erico Nunes
2013-11-17 22:45 ` Joe Perches
2013-11-17 22:45 ` Joe Perches
2013-11-17 22:53 ` Richard Weinberger
2013-11-17 22:53 ` Richard Weinberger
2013-11-18 1:33 ` Al Viro
2013-11-18 1:33 ` Al Viro
2013-11-18 2:07 ` Greg Price [this message]
2013-11-18 2:07 ` [PATCH] Clarify error on directive in macro arguments (Re: [PATCH] jffs2: fix sparse errors: directive in argument list) Greg Price
2013-11-18 2:07 ` Greg Price
2013-11-18 2:15 ` Joe Perches
2013-11-18 2:15 ` Joe Perches
2013-11-18 2:23 ` Erico Nunes
2013-11-18 2:23 ` Erico Nunes
2013-11-18 2:34 ` Al Viro
2013-11-18 2:34 ` Al Viro
2013-11-18 2:34 ` Al Viro
2013-11-18 4:01 ` Greg Price
2013-11-18 4:01 ` Greg Price
2013-11-20 23:53 ` Josh Triplett
2013-11-20 23:51 ` [PATCH] jffs2: fix sparse errors: directive in argument list Josh Triplett
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131118020746.GX16018@ringworld.MIT.EDU \
--to=price@mit.edu \
--cc=dwmw2@infradead.org \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-sparse@vger.kernel.org \
--cc=nunes.erico@gmail.com \
--cc=sparse@chrisli.org \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.