1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker /** 18*795d594fSAndroid Build Coastguard Worker * Automatically generated fuzz test that exposed bug in the way bounds 19*795d594fSAndroid Build Coastguard Worker * check elimination visits basic blocks. If, after dynamic bce, the same 20*795d594fSAndroid Build Coastguard Worker * block would be visited again, then static length based bce would incorrectly 21*795d594fSAndroid Build Coastguard Worker * feed information back to itself and removed a necessary bounds check. 22*795d594fSAndroid Build Coastguard Worker */ 23*795d594fSAndroid Build Coastguard Worker public class Main { 24*795d594fSAndroid Build Coastguard Worker 25*795d594fSAndroid Build Coastguard Worker private static int[][][] mA = new int[10][10][10]; 26*795d594fSAndroid Build Coastguard Worker 27*795d594fSAndroid Build Coastguard Worker private static int mX = 17; 28*795d594fSAndroid Build Coastguard Worker doit()29*795d594fSAndroid Build Coastguard Worker private static int doit() { 30*795d594fSAndroid Build Coastguard Worker int l0 = (((++mA[7][2][8]) <= mA[0][1][3]) ? (++mA[9][0][5]) : ((( -mA[0][7][0]) * ((mX == mX) ? 180 : mX)) + (mA[7][8][8]++))); 31*795d594fSAndroid Build Coastguard Worker mA[1][0][4] -= mX; 32*795d594fSAndroid Build Coastguard Worker int l1 = (((l0 >= ( ~mA[6][7][5])) && ((921 <= l0) && (mA[3][9][6] > l0))) ? mX : (l0--)); 33*795d594fSAndroid Build Coastguard Worker int l2 = ( -384); 34*795d594fSAndroid Build Coastguard Worker for (int i0 = 7 - 1; i0 >= 1; i0--) { 35*795d594fSAndroid Build Coastguard Worker mA[6][0][0] -= ((((l0++) == ( -mX)) ? (((mA[3][i0][1] > 503) || (mX <= i0)) ? (--l0) : (l0--)) : mX) - ( ~(mX--))); 36*795d594fSAndroid Build Coastguard Worker int l3 = 24; 37*795d594fSAndroid Build Coastguard Worker int l4 = ((l2--) & mX); 38*795d594fSAndroid Build Coastguard Worker for (int i1 = i0-2 - 1; i1 >= 3; i1--) { 39*795d594fSAndroid Build Coastguard Worker for (int i2 = 2; i2 < i0; i2++) { 40*795d594fSAndroid Build Coastguard Worker mA[i0][4][l3] >>= 1; 41*795d594fSAndroid Build Coastguard Worker } 42*795d594fSAndroid Build Coastguard Worker } 43*795d594fSAndroid Build Coastguard Worker } 44*795d594fSAndroid Build Coastguard Worker return 1; 45*795d594fSAndroid Build Coastguard Worker } 46*795d594fSAndroid Build Coastguard Worker main(String[] args)47*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 48*795d594fSAndroid Build Coastguard Worker int k = 1; 49*795d594fSAndroid Build Coastguard Worker for (int i0 = 0; i0 < 10; i0++) 50*795d594fSAndroid Build Coastguard Worker for (int i1 = 0; i1 < 10; i1++) 51*795d594fSAndroid Build Coastguard Worker for (int i2 = 0; i2 < 10; i2++) 52*795d594fSAndroid Build Coastguard Worker mA[i0][i1][i2] = k++; 53*795d594fSAndroid Build Coastguard Worker try { 54*795d594fSAndroid Build Coastguard Worker k = doit(); 55*795d594fSAndroid Build Coastguard Worker } catch (Exception e) { 56*795d594fSAndroid Build Coastguard Worker System.out.println("exception caught"); 57*795d594fSAndroid Build Coastguard Worker } 58*795d594fSAndroid Build Coastguard Worker System.out.println("FUZZ result = " + k + " " + mX); 59*795d594fSAndroid Build Coastguard Worker } 60*795d594fSAndroid Build Coastguard Worker } 61