1  struct X { int flag; int pos; };
       2  int foo(struct X *a, struct X *b)
       3  {
       4    while (1)
       5      {
       6        if (a->flag)
       7  	break;
       8        ({ struct X *tmp = a; a = b; b = tmp; });
       9      }
      10  
      11    return a->pos + b->pos;
      12  }