From: "Darren Jenkins" <darrenrjenkins@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Derek M Jones <derek@knosof.co.uk>,
Sparse mailing list <linux-sparse@vger.kernel.org>
Subject: Re: Sparse RFC
Date: Tue, 27 Mar 2007 13:07:53 +1000 [thread overview]
Message-ID: <82faac5b0703262007u71a95cfcre64ff29c5df62b38@mail.gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0703261414400.6730@woody.linux-foundation.org>
On 3/27/07, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Mon, 26 Mar 2007, Derek M Jones wrote:
>
> > 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!)
Hmm it looks like a 'bracket or comma' check wouid correcly ignore
this particular example.
It is obvious however that I need to think about this a bit more.
> > > 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
Yep I am guilty of getting them wrong before.
> 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.
I didn't look into it but I was thinking that something that evaluated
into a comma, after the initial macro expansion would still be
passible/an issue.
Thanks for the feedback guys. I guess I will keep tinkering with it.
Darren J.
next prev parent reply other threads:[~2007-03-27 3:07 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
2007-03-27 3:07 ` Darren Jenkins [this message]
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=82faac5b0703262007u71a95cfcre64ff29c5df62b38@mail.gmail.com \
--to=darrenrjenkins@gmail.com \
--cc=derek@knosof.co.uk \
--cc=linux-sparse@vger.kernel.org \
--cc=torvalds@linux-foundation.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).