
int test(int x, int w, int z) {
    int j;
    long y = 50;

    // simple comparison
    if (x > 0) {
        y = 20;
        z = 10;
    } else {
        y = 30;
    }

    z = x + y;

    // More complex
    if(x < 0 && y > 1)
        y = 40;
    else
        y = 20;  /* The && expression does not control this block as the x<0 expression jumps here if false. */


    z = 10;

    // while loop
    while(x > 0) {
        y = 10;
        x--;
    }

    z += y;

    // for loop
    for(j = 0; j < 10; j++) {
        y = 0;
        w = 10;
    }

    z += w;

    // nested control flow
    for(j = 0; j < 10; j++) {
        y = 30;
        if(z > 0)
            if(y > 0) {
                w = 0;
                break;
            } else {
                w = 20;
            }
        else {
            w = 10;
            continue;
        }
        x = 0;
    }

    if (x == 0 || y < 0) {
        y = 60;
        z = 10;
    } else
        return z;

    z += x;

    return 0;
}


int test2(int x, int w, int z) {
    int j;
    long y = 50;

    // simple comparison
    if (x == 0) {
        y = 20;
        z = 10;
    } else {
        y = 30;
    }

    z = x + y;

    // More complex
    if(x == 0 && y != 0)
        y = 40;
    else
        y = 20;

    
    z = 10;

    // while loop
    while(x != 0) {
        y = 10;
        x--;
    }

    z += y;

    // for loop
    for(j = 0; j < 10; j++) {
        y = 0;
        w = 10;
    }

    z += w;

    if (x == 0 || y < 0) {
        y = 60;
        z = 10;
    } else
        return z;

    z += x;

    return 0;
}

int test3_condition();
void test3_action();

void test3() {
  int b = 0;

  if (1 && test3_condition()) {
    b = 1;
    test3_action();
  }

  if (b) {
    test3_action();
  }
}

void test4(int i) {
  if (0) {
    if (i) {
      ;
    }
  }
  return;
}

void test5(int x) {
  if (!x) {
    test3();
  }
}

void test6(char* p) {
    if(p) {

    }
}

void test7(char* p) {
    if(!p) {
        
    }
}

void test8(short s) {
    if(s) {

    }
}

void test9(short s) {
    if(!s) {
        
    }
}

void test10(int a, int b) {
    if(!(a < b)) {

    }
}

void test11(double foo) {
    if(!(foo >= 1e-6 && foo < 1.0)) {

    }
}

void test12(int a, int b) {
  int c = a != b;

  if (!c) {

  }
}

void test13(int a) {
  int b = a > 10;

  if (!b) {

  }
}

void test14(int a, int b) {
  int c = a > b;

  if (!c) {

  }
}

# define likely(x) __builtin_expect(!!(x), 1)

void test15(int a, int b)
{
	if (likely(a > b)) {

    }

    if (likely(a > 42)) {

    }
}
