On 2/15/21 2:47 PM, Julia Lawall wrote:
>
>
> On Mon, 15 Feb 2021, Denis Efremov wrote:
>
>> Hi,
>>
>> I wrote a simple rule (swap.cocci):
>>
>> virtual patch
>>
>> @depends on patch@
>> identifier tmp;
>> expression a, b;
>> type T;
>> @@
>>
>> (
>> - T tmp;
>> |
>> - T tmp = 0;
>> |
>> - T *tmp = NULL;
>> )
>> ... when != tmp
>> - tmp = a;
>> - a = b;
>> - b = tmp;
>> + swap(a, b);
>> ... when != tmp
>>
>> I would expect it to remove a local variable only if there is a match
>> with swap template.
>>
>> However, it generates "partial" patch on 5.11 linux code:
>> $ spatch --version
>> spatch version 1.0.8-00201-g267f9cf8cc82 compiled with OCaml version 4.11.1
>> $ spatch -D patch --sp-file swap.cocci mm/filemap.c
>> --- mm/filemap.c
>> +++ /tmp/cocci-output-445786-88aa66-filemap.c
>> @@ -2348,7 +2348,7 @@ static int generic_file_buffered_read_ge
>> struct file_ra_state *ra = &filp->f_ra;
>> pgoff_t index = iocb->ki_pos >> PAGE_SHIFT;
>> pgoff_t last_index = (iocb->ki_pos + iter->count + PAGE_SIZE-1) >>
>> PAGE_SHIFT;
>> - int i, j, nr_got, err = 0;
>> + int i, nr_got, err = 0;
>>
>> nr = min_t(unsigned long, last_index - index, nr);
>> find_page:
>>
>> How can I improve the rule?
>
> I don't get a match with the latest version of Coccinelle.
>
> If the latest version of Coccinelle were to become a release, would that
> be good enough for you? Or do you need 1.0.8 to work as well?
I planned to submit the swap rule to scripts/coccinelle. However, I can
create more strict pattern for the patch mode. Maybe adding "when strict"
is suitable here?
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci