First of all, Thank you for your quick response.
But, I'm still in trouble, because your cocci file also doesn't work with this error.

Fatal error: exception Failure("xxx.c: 112: More than one variable in the 
declaration, and so it cannot be transformed.  Check that there is no transformation on 
the type or the ;")


Moreover, in many case of my real code, the second variable is treated with different way.

struct type_b *foo(void);
struct type_b *foo2(void);

int some_function(...)
{
-struct type_a *v1, *v2;
+struct type_b *v1, *v2;
...
v1 = foo();
v2 = foo2();
...
}


Does NOT coccinelle support this case?
If not, I'd be better to find out other way or do it manually.

Thank you & regards,
Junghak


On 07/07/2015 05:49 PM, Julia Lawall wrote:

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