
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(int x, int y) {
  return x && y;
}

int ptr_test(int *x, int *y) {
    if (x == y + 42) {
    }

    if (x == y - 42) {
    }

    if (x < y + 42) {
    }

    if (x < y - 42) {
    }

    return 0;
}

int foo(const char*, int);

int ternary_test(const char *path, int mode)
{
    return (foo(path, mode) == 0 ? 1 : 0);
}

void abort(void);

int abort_test(int x) {
    if (x) {
        x += 1;
    } else {
        abort();
    }
}
