[Cocci] RFC - simple scanners and matching macros

Nicholas Mc Guire der.herr at hofr.at
Tue Dec 23 20:28:52 CET 2014


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

thx!
hofrat
 


More information about the Cocci mailing list