From: Linus Torvalds <torvalds@linux-foundation.org>
To: Derek M Jones <derek@knosof.co.uk>
Cc: Darren Jenkins <darrenrjenkins@gmail.com>,
Sparse mailing list <linux-sparse@vger.kernel.org>
Subject: Re: Sparse RFC
Date: Mon, 26 Mar 2007 14:21:26 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.64.0703261414400.6730@woody.linux-foundation.org> (raw)
In-Reply-To: <4607F19B.6080303@knosof.co.uk>
On Mon, 26 Mar 2007, Derek M Jones wrote:
>
> > I have been playing around with the sparse code, and was thinking of
> > adding a few of the checks that my company uses from other code
> > checkers, starting with checking that macro arguments have brackets
> > around them. (Because this is the test my/other code most often fails)
>
> This is a useful check. However, you need to make sure that
> cases where the presence of () have no impact are not flagged
> if the parameter is always used in such contexts. Otherwise the
> noise can be excessive.
Indeed. In the kernel, for example, we sometimes use nested macros for the
complex cases, and there one of the cases is where the "outer" or inner
macro adds all required brackets. Ie something like
#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
where ALIGN() uses 'x' without any brackets, because it knows the inner
macro is safe (and a comma expression must have had any brackets of its
own, otherwise it wouldn't have parsed as a single macro argument anyway!)
> > 2) For the macro argument checking would it be better if I checked for
> > either a bracket or low precedence operator on both sides of the
> > argument ? like either a comma or a type of assignment operator? it
> > would not be a foolproof check then but would seem more sensible to me,
> > and might be more acceptable to users.
>
> Don't make the assumption that everybody knows the precedence
> of binary operators. An experiment I ran last year with experienced
> developers (average over 10 years) threw up some unexpected results.
> See: http://www.knosof.co.uk/cbook/accu06a.pdf
Yeah. The only exception is literally the comma expression, because of the
syntax of macro expansion itself (ie a comma would break a macro argument,
unless it is bracketed). Pretty much all other precedence rules can pretty
much be expected to be confused by somebody.
Linus
next prev parent reply other threads:[~2007-03-26 21:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-26 13:29 Sparse RFC Darren Jenkins\
2007-03-26 16:15 ` Derek M Jones
2007-03-26 21:21 ` Linus Torvalds [this message]
2007-03-27 3:07 ` Darren Jenkins
2007-03-27 12:04 ` Uwe Kleine-König
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=Pine.LNX.4.64.0703261414400.6730@woody.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=darrenrjenkins@gmail.com \
--cc=derek@knosof.co.uk \
--cc=linux-sparse@vger.kernel.org \
/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).