On Tue, 7 Jul 2015, Junghak Sung wrote:

> Hi~
>
> I'm a newbie for coccinelle.
> I would like to make a cocci file to patch like :
>
> struct type_b *foo(void);
>
> int some_function(...)
> {
> -struct type_a *v1, *v2;
> +struct type_b *v1, *v2;
> ...
> v1 = foo();
> v2 = foo();
> ...
> }
>
> Return value of foo() was changed from struct type_a to struct type_b.
> So, I want to find out the locations where a function use it in and modify the
> type of local variables.
>
> If the number of local variable is just one, this cocci could make the patch
> well.
>
> @@
> identifier i;
> @@
> {
> ...
> -struct type_a *i;
> +struct type_b *i;
> ...
> i = foo();
> ...
> }
>
> But, assuming that the number of local variables is two or more, I have failed
> again and again.
> How can I make cocci file?
> Thank you in advance for your consideration.

Could you try the following?

Coccinelle only allows specifying transformations on variable declarations
one at a time.  But if all declarations are treated in the same way, this
may be OK.  On the other hand, if there is a mixture of pointers and
nonpointers, this will fail.  Such cases are not supported.

@@
type T1;
identifier i,i1;
@@

 struct
- type_a             // only change the type name
+ type_b
 *i;
<... when exists     // there may not be an i =... on every control flow path
T1 i1;               // allow other type_a declarations
...>
i = foo();

julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to