Are you sure that your function is being parsed successfully?  I get a 
reasonable answer for:

int main ()
{
  for (i = 0; i != 10; ++i) {
      switch (q) {
        case FOO:
          for (i = 0; i != 20; ++i) {
              return 12;
            }
        case XXX:
          return 12;
        }
    }
}

and

@@
expression a;
@@

* for ( ... ; ... ; a ) {
 ...
* a
 ...
 }


julia


On Wed, 9 Mar 2011, Nicolas Kaiser wrote:

> Hi there!
> 
> I recently noticed a couple of patches by Roel Kluin on lkml
> that looked interesting to me, and I tried to write a semantic
> patch to find such occurrences. One of the lkml patches:
> 
>  can: wrong index used in inner loop
> http://groups.google.com/group/linux.kernel/browse_thread/thread/6d1e353cedcf5862
> 
> Here are nested 'for' loops using the same iterator, and the
> inner one will overwrite the outer one. In this case, the inner
> loop is within an 'if' clause. Simplified:
> 
> for ( i = 0; ... ; ++i ) {
>     ...
>     if ( ... ) {
>         ...
>         for ( i = 0; ... ; ++i ) {
>         ...
>         }
>     ...
>     }
> }
> 
> A very simple semantic patch I came up with to point to this
> pattern would look like:
> 
> @@
> expression a;
> @@
> 
> * for ( ... ; ... ; a ) {
>  ...
> * a
>  ...
>  }
> 
> However, this semantic patch fails when 'if' is replaced with
> 'switch', like here:
> 
>  nfsd: wrong index used in inner loop
> http://groups.google.com/group/linux.kernel/browse_thread/thread/0366edcfe5497481
> 
> Simplified:
> 
> for ( i = 0; ... ; ++i ) {
>     ...
>     switch ( ... ) {
>     ...
>     case ...:
>         ...
>         for ( i = 0; ... ; ++i ) {
>         ...
>         }
>     ...
>     }
> }
> 
> I'm afraid I'm stuck trying to find the expression within the 'switch'.
> Could you possibly give me a hint what I'm doing wrong?
> 
> Best regards,
> Nicolas Kaiser
> _______________________________________________
> 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