1.class public LB22881413;
2.super Ljava/lang/Object;
3
4# A couple of fields to allow "loading" resolved and unresolved types. Use non-final classes to
5# avoid automatically getting precise reference types.
6.field private static res1:Ljava/lang/Number;
7.field private static res2:Ljava/lang/ClassLoader;
8.field private static res3:Ljava/lang/Package;
9.field private static res4:Ljava/lang/RuntimeException;
10.field private static res5:Ljava/lang/Exception;
11.field private static res6:Ljava/util/ArrayList;
12.field private static res7:Ljava/util/LinkedList;
13.field private static res8:Ljava/lang/Thread;
14.field private static res9:Ljava/lang/ThreadGroup;
15.field private static res10:Ljava/lang/Runtime;
16
17.field private static unres1:La/b/c/d1;
18.field private static unres2:La/b/c/d2;
19.field private static unres3:La/b/c/d3;
20.field private static unres4:La/b/c/d4;
21.field private static unres5:La/b/c/d5;
22.field private static unres6:La/b/c/d6;
23.field private static unres7:La/b/c/d7;
24.field private static unres8:La/b/c/d8;
25.field private static unres9:La/b/c/d9;
26.field private static unres10:La/b/c/d10;
27
28.field private static unresBase0:La/b/c/dBase0;
29.field private static unresBase1:La/b/c/dBase1;
30.field private static unresBase2:La/b/c/dBase2;
31.field private static unresBase3:La/b/c/dBase3;
32.field private static unresBase4:La/b/c/dBase4;
33.field private static unresBase5:La/b/c/dBase5;
34.field private static unresBase6:La/b/c/dBase6;
35.field private static unresBase7:La/b/c/dBase7;
36.field private static unresBase8:La/b/c/dBase8;
37
38# Empty, ignore this. We want to see if the other method can be verified in a reasonable amount of
39# time.
40.method public static run()V
41.registers 2
42       return-void
43.end method
44
45.method public static foo(IZZ) V
46.registers 11
47       # v8 = int, v9 = boolean, v10 = boolean
48
49       sget-object v0, LB22881413;->unresBase0:La/b/c/dBase0;
50
51# Test an UnresolvedUninitializedReference type.
52       new-instance v0, La/b/c/dBaseInit;
53
54       const v1, 0
55       const v2, 0
56
57# We're trying to create something like this (with more loops to amplify things).
58#
59# v0 = Unresolved1
60# while (something) {
61#
62#   [Repeatedly]
63#   if (cond) {
64#     v0 = ResolvedX;
65#   } else {
66#     v0 = UnresolvedX;
67#   }
68#
69#   v0 = Unresolved2
70# };
71#
72# Important points:
73#   1) Use a while, so that the end of the loop is a goto. That way, the merging of outer-loop
74#      unresolved classes is postponed.
75#   2) Put the else cases after all if cases. That way there are backward gotos that will lead
76#      to stabilization loops in the body.
77#
78
79:Loop1
80
81       const v6, 0
82       add-int/lit16 v8, v8, -1
83       if-ge v8, v6, :Loop1End
84
85:Loop2
86
87       const v6, 0
88       add-int/lit16 v8, v8, -1
89       if-ge v8, v6, :Loop2End
90
91:Loop3
92
93       const v6, 0
94       add-int/lit16 v8, v8, -1
95       if-ge v8, v6, :Loop3End
96
97:Loop4
98
99       const v6, 0
100       add-int/lit16 v8, v8, -1
101       if-ge v8, v6, :Loop4End
102
103:Loop5
104
105       const v6, 0
106       add-int/lit16 v8, v8, -1
107       if-ge v8, v6, :Loop5End
108
109:Loop6
110
111       const v6, 0
112       add-int/lit16 v8, v8, -1
113       if-ge v8, v6, :Loop6End
114
115:Loop7
116
117       const v6, 0
118       add-int/lit16 v8, v8, -1
119       if-ge v8, v6, :Loop7End
120
121:Loop8
122
123       const v6, 0
124       add-int/lit16 v8, v8, -1
125       if-ge v8, v6, :Loop8End
126
127# Prototype:
128#
129#       if-eqz v9, :ElseX
130#       sget-object v0, LB22881413;->res1:Ljava/lang/Number;
131#:JoinX
132#
133# And somewhere at the end
134#
135#:ElseX
136#       sget-object v0, LB22881413;->unresX:La/b/c/dX;
137#       goto :JoinX
138#
139#
140
141       if-eqz v10, :Join1
142       if-eqz v9, :Else1
143       sget-object v0, LB22881413;->res1:Ljava/lang/Number;
144:Join1
145
146
147       if-eqz v10, :Join2
148       if-eqz v9, :Else2
149       sget-object v0, LB22881413;->res2:Ljava/lang/ClassLoader;
150:Join2
151
152
153       if-eqz v10, :Join3
154       if-eqz v9, :Else3
155       sget-object v0, LB22881413;->res3:Ljava/lang/Package;
156:Join3
157
158
159       if-eqz v10, :Join4
160       if-eqz v9, :Else4
161       sget-object v0, LB22881413;->res4:Ljava/lang/RuntimeException;
162:Join4
163
164
165       if-eqz v10, :Join5
166       if-eqz v9, :Else5
167       sget-object v0, LB22881413;->res5:Ljava/lang/Exception;
168:Join5
169
170
171       if-eqz v10, :Join6
172       if-eqz v9, :Else6
173       sget-object v0, LB22881413;->res6:Ljava/util/ArrayList;
174:Join6
175
176
177       if-eqz v10, :Join7
178       if-eqz v9, :Else7
179       sget-object v0, LB22881413;->res7:Ljava/util/LinkedList;
180:Join7
181
182
183       if-eqz v10, :Join8
184       if-eqz v9, :Else8
185       sget-object v0, LB22881413;->res8:Ljava/lang/Thread;
186:Join8
187
188
189       if-eqz v10, :Join9
190       if-eqz v9, :Else9
191       sget-object v0, LB22881413;->res9:Ljava/lang/ThreadGroup;
192:Join9
193
194
195       if-eqz v10, :Join10
196       if-eqz v9, :Else10
197       sget-object v0, LB22881413;->res10:Ljava/lang/Runtime;
198:Join10
199
200
201       goto :InnerMostLoopEnd
202
203:Else1
204       sget-object v0, LB22881413;->unres1:La/b/c/d1;
205       goto :Join1
206
207:Else2
208       sget-object v0, LB22881413;->unres2:La/b/c/d2;
209       goto :Join2
210
211:Else3
212       sget-object v0, LB22881413;->unres3:La/b/c/d3;
213       goto :Join3
214
215:Else4
216       sget-object v0, LB22881413;->unres4:La/b/c/d4;
217       goto :Join4
218
219:Else5
220       sget-object v0, LB22881413;->unres5:La/b/c/d5;
221       goto :Join5
222
223:Else6
224       sget-object v0, LB22881413;->unres6:La/b/c/d6;
225       goto :Join6
226
227:Else7
228       sget-object v0, LB22881413;->unres7:La/b/c/d7;
229       goto :Join7
230
231:Else8
232       sget-object v0, LB22881413;->unres8:La/b/c/d8;
233       goto :Join8
234
235:Else9
236       sget-object v0, LB22881413;->unres9:La/b/c/d9;
237       goto :Join9
238
239:Else10
240       sget-object v0, LB22881413;->unres10:La/b/c/d10;
241       goto :Join10
242
243:InnerMostLoopEnd
244
245       # Loop 8 end of body.
246       sget-object v0, LB22881413;->unresBase8:La/b/c/dBase8;
247       goto :Loop8
248
249:Loop8End
250
251       # Loop 7 end of body.
252       sget-object v0, LB22881413;->unresBase7:La/b/c/dBase7;
253       goto :Loop7
254
255:Loop7End
256
257       # Loop 6 end of body.
258       sget-object v0, LB22881413;->unresBase6:La/b/c/dBase6;
259       goto :Loop6
260
261:Loop6End
262
263       # Loop 5 end of body
264       sget-object v0, LB22881413;->unresBase5:La/b/c/dBase5;
265       goto :Loop5
266
267:Loop5End
268
269       # Loop 4 end of body
270       sget-object v0, LB22881413;->unresBase4:La/b/c/dBase4;
271       goto :Loop4
272
273:Loop4End
274
275       # Loop 3 end of body
276       sget-object v0, LB22881413;->unresBase3:La/b/c/dBase3;
277       goto :Loop3
278
279:Loop3End
280
281       # Loop 2 end of body
282       sget-object v0, LB22881413;->unresBase2:La/b/c/dBase2;
283       goto :Loop2
284
285:Loop2End
286
287       # Loop 1 end of body
288       sget-object v0, LB22881413;->unresBase1:La/b/c/dBase1;
289       goto :Loop1
290
291:Loop1End
292
293       return-void
294
295.end method
296