[Cocci] RFC - simple scanners and matching macros

Julia Lawall julia.lawall at lip6.fr
Tue Dec 23 21:53:36 CET 2014



On Tue, 23 Dec 2014, Nicholas Mc Guire wrote:

> On Tue, 23 Dec 2014, Julia Lawall wrote:
> 
> > > Fatal error: exception Failure("meta: parse error:
> > >  = File "false_declare_completion.cocci", line 27, column 14,  charpos = 511
> > >     around = 'DECLARE_COMPLETION', whole content = declarer name DECLARE_COMPLETION;
> > > ")
> > > ...
> > 
> > OK, it's not super intuitive, but the problem is that it wants declarer
> > names, like typedefs, to be declared once and only once.  And in deciding
> > about this, it doesn't take into account the dependencies on virtual
> > rules.  So if you use -D patch, then it complains about a declaration in a
> > case that says depends on !patch.  And if you remove the declarer name
> > declaration in the latter rule, when you use eg -D report, it takes into
> > account the declaration in the previous, but disabled, -D patch rule.
> > 
> > So if you drop the second declarer name declaration, everything will be
> > fine.
> > 
> > The fact that declaring a typedef, declarer name, or iterator name once
> > was good enough was supposed to make things easier, but it seems to just
> > make things confusing.  Maybe I should get rid of this feature, or at
> > least not complain about redeclarations that are consistent with the
> > previous one.
> >
> it did not complain - but something seems to be going wrong now it
> consumes 100% CPU on all avaialble cores for about 8 minutes and
> finds no match
> 
> hofrat at debian:/tmp/linux-next$ time make coccicheck COCCI=false_declare_completion.cocci MODE=report
> 
> Please check for false positives in the output before submitting a patch.
> When using "patch" mode, carefully review the patch before submitting it.
> 
> 
> real    8m9.438s
> user    33m6.005s
> sys     0m10.277s
> 
> about the same in MODE=patch, the other cocci file over the same tree ran
> 
> real    0m48.492s
> user    2m26.627s
> sys     0m1.933s
> 
> an example file where I had expected it to trigger is
> drivers/scsi/aha152x.c - but it did not.
> 
> cut down testcse would be:
> 
> test.c:
> static int aha152x_device_reset(Scsi_Cmnd * SCpnt)
> {
>         struct Scsi_Host *shpnt = SCpnt->device->host;
>         DECLARE_COMPLETION(done);
>         int ret, issued, disconnected;
>         unsigned char old_cmd_len = SCpnt->cmd_len;
>         unsigned long flags;
>         unsigned long timeleft;
>         /* snippet from drivers/scsi/aha152x.c */
> }
> 
> test.cocci:
> @e@
> expression cmp;
> identifier f;
> declarer name DECLARE_COMPLETION;
> position p;
> @@
> 
> f(...) {
>   <...
> - DECLARE_COMPLETION at p(cmp);
> + DECLARE_COMPLETION_ONSTACK(cmp);
>   ...>
> }
> 
> which should trigger if I did not do something foolish again
> but it did not:
> 
> hofrat at debian:/tmp/linux-next$ spatch --sp-file test.cocci test.c
> init_defs_builtins: /usr/local/share/coccinelle/standard.h
> HANDLING: test.c

It works fine for me.  What version of Coccinelle do you have?

For the performance problem, could you send the current semantic patch 
again, so I could be sure to be testing the right thing?

thanks,
julia


More information about the Cocci mailing list