xref: /aosp_15_r20/art/test/731-bounds-check-slow-path/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2022 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 public class Main {
main(String args[])18*795d594fSAndroid Build Coastguard Worker     public static void main(String args[]) {
19*795d594fSAndroid Build Coastguard Worker         Test227365246 test227365246 = new Test227365246();
20*795d594fSAndroid Build Coastguard Worker         test227365246.$noinline$mainTest(args);
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker         Test216608614 test216608614 = new Test216608614();
23*795d594fSAndroid Build Coastguard Worker         test216608614.$noinline$mainTest(args);
24*795d594fSAndroid Build Coastguard Worker 
25*795d594fSAndroid Build Coastguard Worker         Test216629762 test216629762 = new Test216629762();
26*795d594fSAndroid Build Coastguard Worker         test216629762.$noinline$mainTest(args);
27*795d594fSAndroid Build Coastguard Worker     }
28*795d594fSAndroid Build Coastguard Worker }
29*795d594fSAndroid Build Coastguard Worker 
30*795d594fSAndroid Build Coastguard Worker class Test227365246 {
31*795d594fSAndroid Build Coastguard Worker     int N = 400;
32*795d594fSAndroid Build Coastguard Worker     int iFld;
33*795d594fSAndroid Build Coastguard Worker 
$noinline$mainTest(String[] strArr1)34*795d594fSAndroid Build Coastguard Worker     void $noinline$mainTest(String[] strArr1) {
35*795d594fSAndroid Build Coastguard Worker         int i17, i18 = 5788, i19, i21, i22 = 127, i23;
36*795d594fSAndroid Build Coastguard Worker         byte[] byArr = new byte[N];
37*795d594fSAndroid Build Coastguard Worker         for (i17 = 14; 297 > i17; ++i17)
38*795d594fSAndroid Build Coastguard Worker             for (int ax$2 = 151430; ax$2 < 235417; ax$2 += 2) {}
39*795d594fSAndroid Build Coastguard Worker         try {
40*795d594fSAndroid Build Coastguard Worker             for (i19 = 4; 179 > i19; ++i19) {
41*795d594fSAndroid Build Coastguard Worker                 i18 *= i18;
42*795d594fSAndroid Build Coastguard Worker                 for (i21 = 1; i21 < 58; i21++)
43*795d594fSAndroid Build Coastguard Worker                     for (i23 = i21; 1 + 400 > i23; i23++) {
44*795d594fSAndroid Build Coastguard Worker                         byArr[i23] -= i22;
45*795d594fSAndroid Build Coastguard Worker                         i18 += i23;
46*795d594fSAndroid Build Coastguard Worker                         switch (i19 % 5) {
47*795d594fSAndroid Build Coastguard Worker                             case 107:
48*795d594fSAndroid Build Coastguard Worker                                 i19 >>= iFld;
49*795d594fSAndroid Build Coastguard Worker                         }
50*795d594fSAndroid Build Coastguard Worker                     }
51*795d594fSAndroid Build Coastguard Worker             }
52*795d594fSAndroid Build Coastguard Worker         } catch (ArrayIndexOutOfBoundsException exc1) {
53*795d594fSAndroid Build Coastguard Worker         }
54*795d594fSAndroid Build Coastguard Worker         System.out.println("i17 i18 b = " + i17 + "," + i18 + "," + 0);
55*795d594fSAndroid Build Coastguard Worker     }
56*795d594fSAndroid Build Coastguard Worker }
57*795d594fSAndroid Build Coastguard Worker 
58*795d594fSAndroid Build Coastguard Worker class Test216608614 {
59*795d594fSAndroid Build Coastguard Worker     int N = 400;
60*795d594fSAndroid Build Coastguard Worker     long lFld;
61*795d594fSAndroid Build Coastguard Worker     double dFld;
62*795d594fSAndroid Build Coastguard Worker     int iArrFld[]=new int[N];
$noinline$mainTest(String[] strArr1)63*795d594fSAndroid Build Coastguard Worker     void $noinline$mainTest(String[] strArr1) {
64*795d594fSAndroid Build Coastguard Worker         // Note: The original bug report started with `l=-1213929899L` but this took
65*795d594fSAndroid Build Coastguard Worker         // too long when running with interpreter without JIT and we want to allow
66*795d594fSAndroid Build Coastguard Worker         // this test to run for all configurations. Starting with `l=-1000000L` was
67*795d594fSAndroid Build Coastguard Worker         // enough to allow JIT to compile the method for OSR and trigger the bug on host.
68*795d594fSAndroid Build Coastguard Worker         long l=-1000000L;
69*795d594fSAndroid Build Coastguard Worker         int i19= 46, i20=100, i21, i22=13, i25;
70*795d594fSAndroid Build Coastguard Worker         try {
71*795d594fSAndroid Build Coastguard Worker             do
72*795d594fSAndroid Build Coastguard Worker                 for (; i19 < 172; ++i19)
73*795d594fSAndroid Build Coastguard Worker                     lFld = (long) dFld;
74*795d594fSAndroid Build Coastguard Worker             while (++l < 146);
75*795d594fSAndroid Build Coastguard Worker             for (i21 = 8;; ++i21)
76*795d594fSAndroid Build Coastguard Worker                 for (i25 = 1; i25 < 2; i25++) {
77*795d594fSAndroid Build Coastguard Worker                     i20 = i22 % 1650388388;
78*795d594fSAndroid Build Coastguard Worker                     i20 = iArrFld[i21];
79*795d594fSAndroid Build Coastguard Worker                     i22 = 60;
80*795d594fSAndroid Build Coastguard Worker                 }
81*795d594fSAndroid Build Coastguard Worker         } catch (ArrayIndexOutOfBoundsException exc1) {
82*795d594fSAndroid Build Coastguard Worker         } finally {
83*795d594fSAndroid Build Coastguard Worker         }
84*795d594fSAndroid Build Coastguard Worker         System.out.println("l i19 i20 = " + l + "," + i19 + "," + i20);
85*795d594fSAndroid Build Coastguard Worker     }
86*795d594fSAndroid Build Coastguard Worker }
87*795d594fSAndroid Build Coastguard Worker 
88*795d594fSAndroid Build Coastguard Worker class Test216629762 {
89*795d594fSAndroid Build Coastguard Worker     static int N = 400;
90*795d594fSAndroid Build Coastguard Worker     int iFld=29275;
91*795d594fSAndroid Build Coastguard Worker     volatile double dFld;
92*795d594fSAndroid Build Coastguard Worker     static long lArrFld[][]=new long[N][N];
93*795d594fSAndroid Build Coastguard Worker 
$noinline$mainTest(String[] strArr1)94*795d594fSAndroid Build Coastguard Worker     void $noinline$mainTest(String[] strArr1) {
95*795d594fSAndroid Build Coastguard Worker         int i8, i10=181, i11, i12=-57574, i13=69, i15= 6, i16= 186, i17= 227;
96*795d594fSAndroid Build Coastguard Worker         try {
97*795d594fSAndroid Build Coastguard Worker             for (i11 = 6; i11 < 278 + 400; ++i11)
98*795d594fSAndroid Build Coastguard Worker                 i12 *= iFld;
99*795d594fSAndroid Build Coastguard Worker             for (;; i13++) {
100*795d594fSAndroid Build Coastguard Worker                 i10 /= i10;
101*795d594fSAndroid Build Coastguard Worker                 i16 += i15;
102*795d594fSAndroid Build Coastguard Worker                 lArrFld[i13][i15] >>= 31616;
103*795d594fSAndroid Build Coastguard Worker                 for (i17 = 1; i17 <  1 + 400; i17++)
104*795d594fSAndroid Build Coastguard Worker                 dFld += dFld;
105*795d594fSAndroid Build Coastguard Worker             }
106*795d594fSAndroid Build Coastguard Worker         }
107*795d594fSAndroid Build Coastguard Worker         catch (ArrayIndexOutOfBoundsException exc2) {
108*795d594fSAndroid Build Coastguard Worker             i16 += i12;
109*795d594fSAndroid Build Coastguard Worker         }
110*795d594fSAndroid Build Coastguard Worker         System.out.println("i16 b i17 = " + i16 + "," + 0  + "," + i17);
111*795d594fSAndroid Build Coastguard Worker     }
112*795d594fSAndroid Build Coastguard Worker }
113