You can try:

@@
@@
* main () {
   ...
   when != Foo(...)
}

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