From mboxrd@z Thu Jan 1 00:00:00 1970 From: jh1009.sung@samsung.com (Junghak Sung) Date: Tue, 07 Jul 2015 19:11:49 +0900 Subject: [Cocci] [cocci] Ask for help In-Reply-To: References: <559B8E1F.2090803@samsung.com> Message-ID: <559BA5E5.9000709@samsung.com> To: cocci@systeme.lip6.fr List-Id: cocci@systeme.lip6.fr 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 >