I will look into it, but there is a bug in the structure of the 
control-flow graph for switch, and this may be suffering from that.

julia


On Wed, 21 Jul 2010, Eric Noulard wrote:

> Hi All,
> 
> I do have trouble to write an semantic patch:
> 
> I want to remove the "double break" and add an "else"
> in the following switch:
> 
> int main(void) {
>   int v = 3;
>   int a = 0;
>   int g = 8;
> 
>   switch (v) {
>   case 1:
>   case 2:
>     if (a>0) {
>       g = g*2;
>       break;
>     }
>     g = g +1;
>     break;
>   default:
>     g= 0;
>     break;
>   }
>   return 0;
> }
> 
> thus obtain:
> 
> int main(void) {
>   int v = 3;
>   int a = 0;
>   int g = 8;
> 
>   switch (v) {
>   case 1:
>   case 2:
>     if (a>0) {
>       g = g*2;
>     } else {
>       g = g +1;
>     }
>     break;
>   default:
>     g= 0;
>     break;
>   }
>   return 0;
> }
> 
> The following semantic fails to do that (else is not added)
> and I don't know why...
> 
> @nodoublebreak@
> expression x, e, f;
> position p;
> @@
> switch (e) {
> case x :
> ...
> if (f) {
> ...
> - br...@p;
> - }
> + }
> + else {
> ...
> + }
> break;
> ...
> }
> 
> -- 
> Erk
> Membre de l'April - « promouvoir et défendre le logiciel libre » -
> http://www.april.org
> _______________________________________________
> Cocci mailing list
> [email protected]
> http://lists.diku.dk/mailman/listinfo/cocci
> (Web access from inside DIKUs LAN only)
> 
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to