Re: [cocci] [PATCH] scripts/coccinelle: Add script for using ARRAY_END()

From: Julia Lawall

Date: Mon Mar 09 2026 - 08:31:35 EST




On Mon, 9 Mar 2026, Alejandro Colomar wrote:

> Hi Markus,
>
> On 2026-03-09T12:17:00+0100, Markus Elfring wrote:
> > …
> > > This script makes it easy to find more places where that macro should be
> > > used.
> >
> > See also:
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v7.0-rc3#n94
>
> Thanks!
>
> > …
> > > +++ b/scripts/coccinelle/misc/array_end.cocci
> > > @@ -0,0 +1,93 @@
> > …
> >
> >
> > > +// Confidence: ???
> >
> > I hope that a more reasonable value can be determined for this information.
>
> I don't know how the scale works. I know the script has a few false
> negatives, and AFAIK there are no false positives. To what level of
> confidence would that belong?

Probably high would be fine. The goal is mostly to indiacte whether the
results are most likely correct or whether they will require a lot of
study to know if everything is ok.

>
> Is that field a keyword, or may I be explicit such as with this?:
>
> // Confidence: no false positives, but a few false negatives
>
> Or maybe I should write that in Comments...
>
> > …
> > > +// Comments:
> >
> > Please omit such an empty field.
>
> Ok; thanks!
>
> $ grep -rh '^// Comments:' scripts/coccinelle/ | sort | uniq -c
> 34 // Comments:
> 2 // Comments: -
> 1 // Comments: -I ... -all_includes can give more complete results
> 1 // Comments: Comments on code can be deleted if near code that is removed.
> 1 // Comments: Some false positives on empty default cases in switch statements.
> 1 // Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
> $ find scripts/coccinelle/ -type f | wc -l
> 76
>
>
> It seems around half of the existing scripts have that. You may want to
> remove those empty comments. I added it because the scripts I looked at
> do have it.

I don't require taht an empty comments field be removed.

> > …
> > > +@i@
> > > +@@
> > > +
> > > +#include <linux/kernel.h>
> >
> > I doubt that such an SmPL rule would be required.
>
> Okay, I'll remove it. Thanks!

I'm lacking context. You maye need this if the file doesn't already have
it. But it is hard to know if it could be include indirectly...

julia


>
> > > +
> > > +//----------------------------------------------------------
> > > +// For context mode
> > > +//----------------------------------------------------------
> > > +
> >
> > Please omit such extra comment lines.
>
> Agree. BTW, you may want to remove such lines from existing scripts:
>
> $ grep -r '^//.*For context mode' scripts/coccinelle/
> scripts/coccinelle/null/deref_null.cocci:// For context mode
> scripts/coccinelle/misc/boolconv.cocci:// For context mode
> scripts/coccinelle/misc/array_size.cocci:// For context mode
> scripts/coccinelle/misc/struct_size.cocci:// For context mode
> scripts/coccinelle/misc/newline_in_nl_msg.cocci:// For context mode
> scripts/coccinelle/misc/badty.cocci:// For context mode
> scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci:// For context mode
> scripts/coccinelle/api/alloc/zalloc-simple.cocci:// For context mode
> scripts/coccinelle/api/alloc/alloc_cast.cocci:// For context mode
> scripts/coccinelle/api/pm_runtime.cocci:// For context mode
> scripts/coccinelle/api/resource_size.cocci:// For context mode
> scripts/coccinelle/api/vma_pages.cocci:// For context mode
>
> > > +@depends on i&&context@
> > > +type T;
> > > +T[] a;
> > > +expression b;
> > > +@@
> > > +(
> > > +* (a + ARRAY_SIZE(a))
> > > +|
> > > +* (&a[0] + ARRAY_SIZE(a))
> > > +|
> > > +* (&a[ARRAY_SIZE(a)])
> > > +|
> > > +* (&a[ARRAY_SIZE(a) - b])
> > > +)
> >
> > Extra space characters may be omitted directly after SmPL asterisks.
>
> Good to know; thanks!
>
> Although most scripts seem to be using white space (space (164) or
> tab (26)) after the asterisk. Please confirm if you prefer it removed
> in new scripts. Only 39 scripts don't have white space after it.
>
> $ grep -rh '^\*' scripts/coccinelle/ | grep -o '^..' | sort | uniq -c
> 26 *
> 164 *
> 4 *(
> 1 *;
> 1 *E
> 1 *I
> 1 *P
> 2 *W
> 1 *\
> 1 *b
> 1 *c
> 3 *d
> 1 *e
> 4 *f
> 1 *g
> 2 *i
> 1 *l
> 4 *r
> 2 *s
> 1 *u
> 2 *w
> 5 *x
> $ grep -rh '^\*' scripts/coccinelle/ | grep -o '^.\s' | sort | uniq -c | hd
> 00000000 20 20 20 20 20 32 36 20 2a 09 0a 20 20 20 20 31 | 26 *.. 1|
> 00000010 36 34 20 2a 20 0a |64 * .|
> 00000016
> $ grep -rh '^\*' scripts/coccinelle/ | grep -o '^.\S' | wc -l
> 39
>
>
> > …
> > > +@r depends on (org || report)@
> >
> > You may omit parentheses here.
>
> Ok.
>
> > …
> > > +@script:python depends on report@
> > > +p << r.p;
> > > +@@
> > > +
> > > +msg="WARNING: Use ARRAY_END"
> > > +coccilib.report.print_report(p[0], msg)
> >
> > Would the following command variant be a bit nicer?
> >
> > coccilib.report.print_report(p[0], "WARNING: opportunity for ARRAY_END()")
>
> Sounds good.
>
> > By the way:
> > How do you think about to omit a cover letter for a single patch?
>
> Sounds reasonable. I like the cover letter as it holds the range-diff,
> which may become a bit confusing when it's in the same email as the
> patch, but maybe that's just me.
>
> I'll send v2 in a single email.
>
> >
> > Regards,
> > Markus
>
> Have a lovely day!
> Alex
>
> --
> <https://www.alejandro-colomar.es>
>