[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] checkpatch: Eliminate false positive in cas
From: |
Leonid Bloch |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] checkpatch: Eliminate false positive in case of space before square bracket in a definition |
Date: |
Thu, 29 Oct 2015 18:59:18 +0200 |
On Thu, Oct 29, 2015 at 6:13 PM, Eric Blake <address@hidden> wrote:
>
> On 10/29/2015 03:48 AM, Leonid Bloch wrote:
> > Now, macro definition such as "#define abc(x) [x] = y" should pass
> > without an error.
>
> Do we even have macros like that? Without context, it seems like that
> macro definition is under-parenthesized, and that you wouldn't want to
> use abc(x) in an arbitrary expression for fear of precedence rules
> causing nasty surprises.
Yes, for example, in hw/net/e1000.c, there is:
#define getreg(x) [x] = mac_readreg (l: 1209)
#define putreg(x) [x] = mac_writereg (l: 1230)
This issue came up in the latest patches I've sent to e1000, and in
the RFC patches we have sent for e1000e.
Leonid.
>
> >
> > Signed-off-by: Leonid Bloch <address@hidden>
> > ---
> > scripts/checkpatch.pl | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> > index 455d94b..e7d9cce 100755
> > --- a/scripts/checkpatch.pl
> > +++ b/scripts/checkpatch.pl
> > @@ -1716,11 +1716,13 @@ sub process {
> > # 2. at the beginning of a line for slice initialisers -- [0...10] = 5,
> > # 3. inside a curly brace -- = { [0...10] = 5 }
> > # 4. after a comma -- [1] = 5, [2] = 6
> > +# 5. in a macro definition -- #define abc(x) [x] = y
> > while ($line =~ /(.*?\s)\[/g) {
> > my ($where, $prefix) = ($-[1], $1);
> > if ($prefix !~ /$Type\s+$/ &&
> > ($where != 0 || $prefix !~ /^.\s+$/) &&
> > $prefix !~ /{\s+$/ &&
> > + $prefix !~ /\#\s*define[^(]*\([^)]*\)\s+$/ &&
> > $prefix !~ /,\s+$/) {
> > ERROR("space prohibited before open square
> > bracket '['\n" . $herecurr);
> > }
> >
>
> --
> Eric Blake eblake redhat com +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>