linux-sparse.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Joe Perches <joe@perches.com>
Cc: 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: Re: [PATCH] jffs2: fix sparse errors: directive in argument list
Date: Mon, 18 Nov 2013 01:33:49 +0000	[thread overview]
Message-ID: <20131118013349.GM13318@ZenIV.linux.org.uk> (raw)
In-Reply-To: <1384728305.14335.4.camel@joe-AO722>

On Sun, Nov 17, 2013 at 02:45:05PM -0800, Joe Perches wrote:
> On Sun, 2013-11-17 at 20:34 -0200, Erico Nunes wrote:
> > Do you mean it as an error in the sparse tool?
> 
> Yes.  I think it's a defect in how sparse
> treats string concatenation.
> 
> That style:
> 
> 	printk("%s\n",
> #ifdef FOO
> 	"foo"
> #endif
> #ifdef BAR
> 	"bar"
> #endif
> 	"string");
> 
> 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.

Folks, please, RTFStandard if you decide to play clever games with
preprocessing.  Chapter 6.10 is not particulary long or complicated.
C99 has improved the preprocessor semantics a whole lot compared to
the earlier horrible mess (mostly by defining it in terms of token
stream transformations rather then text ones), but it's still very
easy to abuse...

  parent reply	other threads:[~2013-11-18  1:33 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1384719513-27386-1-git-send-email-nunes.erico@gmail.com>
2013-11-17 21:40 ` [PATCH] jffs2: fix sparse errors: directive in argument list Joe Perches
2013-11-17 22:34   ` Erico Nunes
2013-11-17 22:43     ` Erico Nunes
2013-11-17 22:45     ` Joe Perches
2013-11-17 22:53       ` Richard Weinberger
2013-11-18  1:33       ` Al Viro [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:15           ` Joe Perches
2013-11-18  2:23             ` Erico Nunes
2013-11-18  2:34             ` Al Viro
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=20131118013349.GM13318@ZenIV.linux.org.uk \
    --to=viro@zeniv.linux.org.uk \
    --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 \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).