import java.util.Arrays;

public class TestArrayAccessAboveRCAfterSinking {
    public static void main(String[] args) {
        boolean[] allFalse = new boolean[100];
        boolean[] allTrue = new boolean[100];
        Arrays.fill(allTrue, true);
        int[] array = new int[100];
        for (int i = 0; i < 20_000; i++) {
            test(allTrue, array, 0, true, 0);
            test(allTrue, array, 0, false, 0);
            inlined(allFalse, array, 2, 0);
            inlined(allFalse, array, 42, 0);
            inlined(allTrue, array, 2, 0);
        }
        try {
            test(allTrue, array, -1, true, 0);
        } catch (ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException) {
        }
    }

    private static int test(boolean[] flags, int[] array, int k, boolean flag, int v) {
        if (flags == null) {
        }
        if (array == null) {
        }
        int j = 1;
        for (; j < 2; j *= 2) {
        }
        int i;
        for (i = 0; i < 10; i += j) {

        }
        if (flags[i - 10]) {
            if (flag) {
                return inlined(flags, array, j, k);
            } else {
                return inlined(flags, array, j, k) + v;
            }
        }
        return 0;
    }

    private static int inlined(boolean[] flags, int[] array, int j, int k) {
        for (int i = 0; i < 100; i++) {
            final boolean flag = flags[i & (j - 3)];
            int v = array[i + k];
            if (flag) {
                return v;
            }
            if (j + (i & (j - 2)) == 2) {
                break;
            }
        }
        return 0;
    }
}
