From: jh1009.sung@samsung.com (Junghak Sung)
To: cocci@systeme.lip6.fr
Subject: [Cocci] [cocci] Ask for help
Date: Tue, 07 Jul 2015 19:11:49 +0900 [thread overview]
Message-ID: <559BA5E5.9000709@samsung.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1507071043210.2516@hadrien>
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
>
next prev parent reply other threads:[~2015-07-07 10:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-07 8:30 [Cocci] [cocci] Ask for help Junghak Sung
2015-07-07 8:49 ` Julia Lawall
2015-07-07 10:11 ` Junghak Sung [this message]
2015-07-07 10:43 ` Peter Senna Tschudin
2015-07-07 11:51 ` Julia Lawall
2015-07-08 0:55 ` Junghak Sung
2015-07-08 7:41 ` Julia Lawall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=559BA5E5.9000709@samsung.com \
--to=jh1009.sung@samsung.com \
--cc=cocci@systeme.lip6.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.