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

    // if-else, multiple statements in block
    if (x > 0) {
        y = 20;
        z = 10;
    } else {
        y = 30;
    }

    z = x + y;

    // if-else with return in one branch
    if(x < 0)
        y = 40;
    else
        return z;

    // this is not the start of a BB due to the return
    z = 10;

    // single-branch if-else
    if (x == 0) {
        y = 60;
        z = 10;
    }

    z += x;

    // 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;
    }

    z += x + y + w;

    // nested control-flow

    w = 40;
    return w;
}

void test2(int a) {
    /* Some more complex flow control */
    int b, c;
    for (;;) {
        b = 10;
        if (a > 100) {
            c = 10; 
            b = c;
        }
        if (a == 10)
            break;
        if (a == 20)
            return c;
    }
    return b;
}

void partly_undefined(int cond) {
    int x;
    if (cond) {
        x = 1;
    }
    use(x);
}

