On Mon, 27 Jan 2014, Peter Senna Tschudin wrote:

> You can try:
> 
> @@
> @@
> * main () {
>    ...
>    when != Foo(...)
> }

Normally the first when should be on the same line as the ...

julia

> This semantic patch will match functions named main that do not
> contain call to function Foo;
> 
> On Mon, Jan 27, 2014 at 2:55 PM, 林嘉(程二 福州) <[email protected]> wrote:
> > Thanks for explain, but if I want to write a simple match, that is function 
> > foo must be called in main()
> > e.g.
> >
> > int main(...)
> > {
> >     ...
> >     Foo(...);
> >     ...
> > }
> >
> > I write it as
> >
> > @@
> > @@
> > main(...) {
> >   <...
> >     when != reg_process_exit_action(...)
> >   ...>
> > }
> >
> > Reports: 53 57
> > Fatal error: exception Failure("minus: parse error:
> >  = File "rgos.cocci", line 6, column 2,  charpos = 53
> >     around = '...>', whole content =   ...>
> > ")
> >
> > What does it mean?
> >
> > By the way, I still don’t know when I should use '<'and'>' and when need 
> > not?
> >
> > -----邮件原件-----
> > 发件人: Julia Lawall [mailto:[email protected]]
> > 发送时间: 2014年1月27日 20:34
> > 收件人: 林嘉(程二 福州)
> > 抄送: [email protected]
> > 主题: Re: 答复: [Cocci] how to write such matching case?
> >
> > On Mon, 27 Jan 2014, 林嘉(程二 福州) wrote:
> >
> >> I wrote this
> >>
> >> @@
> >> @@
> >> cli_printf(...)
> >> ... when != cli_client_execmd_fail(...)
> >>
> >>
> >> it reports:
> >> Fatal error: exception Failure("False should not be in the final
> >> result.  Perhaps your rule doesn't contain any +/-/* code, or you have
> >> a failed dependency.")
> >>
> >>
> >> But i found there is not 'minus' in an example.cocci either....
> >
> > There is a * (indicating a line of interest).  You can use that.  If you 
> > use that, you will get an exists semantics for the ... (there exists an 
> > execution path that satisfies the property).  Otherwise, you get a foral 
> > semantics (all execution paths have to satisfy the property).
> >
> > julia
> >
> >>
> >>
> >> //
> >> //  Add missing pci_dev_put
> >> //
> >> // Target: Linux
> >> // Copyright:  2012 - LIP6/INRIA
> >> // License:  Licensed under ISC. See LICENSE or
> >> http://www.isc.org/software/license
> >> // Author: Julia Lawall <[email protected]> // URL:
> >> http://coccinelle.lip6.fr/ // URL: http://coccinellery.org/
> >>
> >> @@
> >> local idexpression x;
> >> expression e;
> >> @@
> >>
> >> *x = pci_get_slot(...)
> >> ... when != true x == NULL
> >>     when != pci_dev_put(x)
> >>     when != e = x
> >>     when != if (x != NULL) {<+... pci_dev_put(x); ...+>} *return ...;
> >>
> >>
> >>
> >>
> >>
> >> -----邮件原件-----
> >> 发件人: Julia Lawall [mailto:[email protected]]
> >> 发送时间: 2014年1月26日 19:19
> >> 收件人: 林嘉(程二 福州)
> >> 抄送: [email protected]
> >> 主题: Re: [Cocci] how to write such matching case?
> >>
> >> On Sun, 26 Jan 2014, 林嘉(程二 福州) wrote:
> >>
> >> > In my project, it's required that if function A is called, and
> >> > function B must be called following, just like this
> >> >
> >> > Foo(...)
> >> > {
> >> >    If ... {
> >> >        A(....);
> >> >        ...
> >> >        B(....);
> >> >    }
> >> > }
> >> >
> >> > Or
> >> >
> >> > Foo1(...)
> >> > {
> >> >         A(....);
> >> >         B(...);
> >> >  }
> >> >
> >> >
> >> > How to write a patch to find the missing case? Such as
> >> >
> >> > Foo(...)
> >> > {
> >> >    If ... {
> >> >        A(....);
> >> >        ...
> >> >    }
> >> > }
> >> >
> >> > Or
> >> >
> >> > Foo1(...)
> >> > {
> >> >        A(....);
> >> >        ...
> >> > }
> >>
> >> A(...)
> >> ... When != B(...)
> >>
> >> julia
> >>
> > _______________________________________________
> > Cocci mailing list
> > [email protected]
> > https://systeme.lip6.fr/mailman/listinfo/cocci
> 
> 
> 
> -- 
> Peter
> 
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to