You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
6.5 KiB
296 lines
6.5 KiB
.class public LB22881413;
|
|
.super Ljava/lang/Object;
|
|
|
|
# A couple of fields to allow "loading" resolved and unresolved types. Use non-final classes to
|
|
# avoid automatically getting precise reference types.
|
|
.field private static res1:Ljava/lang/Number;
|
|
.field private static res2:Ljava/lang/ClassLoader;
|
|
.field private static res3:Ljava/lang/Package;
|
|
.field private static res4:Ljava/lang/RuntimeException;
|
|
.field private static res5:Ljava/lang/Exception;
|
|
.field private static res6:Ljava/util/ArrayList;
|
|
.field private static res7:Ljava/util/LinkedList;
|
|
.field private static res8:Ljava/lang/Thread;
|
|
.field private static res9:Ljava/lang/ThreadGroup;
|
|
.field private static res10:Ljava/lang/Runtime;
|
|
|
|
.field private static unres1:La/b/c/d1;
|
|
.field private static unres2:La/b/c/d2;
|
|
.field private static unres3:La/b/c/d3;
|
|
.field private static unres4:La/b/c/d4;
|
|
.field private static unres5:La/b/c/d5;
|
|
.field private static unres6:La/b/c/d6;
|
|
.field private static unres7:La/b/c/d7;
|
|
.field private static unres8:La/b/c/d8;
|
|
.field private static unres9:La/b/c/d9;
|
|
.field private static unres10:La/b/c/d10;
|
|
|
|
.field private static unresBase0:La/b/c/dBase0;
|
|
.field private static unresBase1:La/b/c/dBase1;
|
|
.field private static unresBase2:La/b/c/dBase2;
|
|
.field private static unresBase3:La/b/c/dBase3;
|
|
.field private static unresBase4:La/b/c/dBase4;
|
|
.field private static unresBase5:La/b/c/dBase5;
|
|
.field private static unresBase6:La/b/c/dBase6;
|
|
.field private static unresBase7:La/b/c/dBase7;
|
|
.field private static unresBase8:La/b/c/dBase8;
|
|
|
|
# Empty, ignore this. We want to see if the other method can be verified in a reasonable amount of
|
|
# time.
|
|
.method public static run()V
|
|
.registers 2
|
|
return-void
|
|
.end method
|
|
|
|
.method public static foo(IZZ) V
|
|
.registers 11
|
|
# v8 = int, v9 = boolean, v10 = boolean
|
|
|
|
sget-object v0, LB22881413;->unresBase0:La/b/c/dBase0;
|
|
|
|
# Test an UnresolvedUninitializedReference type.
|
|
new-instance v0, La/b/c/dBaseInit;
|
|
|
|
const v1, 0
|
|
const v2, 0
|
|
|
|
# We're trying to create something like this (with more loops to amplify things).
|
|
#
|
|
# v0 = Unresolved1
|
|
# while (something) {
|
|
#
|
|
# [Repeatedly]
|
|
# if (cond) {
|
|
# v0 = ResolvedX;
|
|
# } else {
|
|
# v0 = UnresolvedX;
|
|
# }
|
|
#
|
|
# v0 = Unresolved2
|
|
# };
|
|
#
|
|
# Important points:
|
|
# 1) Use a while, so that the end of the loop is a goto. That way, the merging of outer-loop
|
|
# unresolved classes is postponed.
|
|
# 2) Put the else cases after all if cases. That way there are backward gotos that will lead
|
|
# to stabilization loops in the body.
|
|
#
|
|
|
|
:Loop1
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop1End
|
|
|
|
:Loop2
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop2End
|
|
|
|
:Loop3
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop3End
|
|
|
|
:Loop4
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop4End
|
|
|
|
:Loop5
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop5End
|
|
|
|
:Loop6
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop6End
|
|
|
|
:Loop7
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop7End
|
|
|
|
:Loop8
|
|
|
|
const v6, 0
|
|
add-int/lit16 v8, v8, -1
|
|
if-ge v8, v6, :Loop8End
|
|
|
|
# Prototype:
|
|
#
|
|
# if-eqz v9, :ElseX
|
|
# sget-object v0, LB22881413;->res1:Ljava/lang/Number;
|
|
#:JoinX
|
|
#
|
|
# And somewhere at the end
|
|
#
|
|
#:ElseX
|
|
# sget-object v0, LB22881413;->unresX:La/b/c/dX;
|
|
# goto :JoinX
|
|
#
|
|
#
|
|
|
|
if-eqz v10, :Join1
|
|
if-eqz v9, :Else1
|
|
sget-object v0, LB22881413;->res1:Ljava/lang/Number;
|
|
:Join1
|
|
|
|
|
|
if-eqz v10, :Join2
|
|
if-eqz v9, :Else2
|
|
sget-object v0, LB22881413;->res2:Ljava/lang/ClassLoader;
|
|
:Join2
|
|
|
|
|
|
if-eqz v10, :Join3
|
|
if-eqz v9, :Else3
|
|
sget-object v0, LB22881413;->res3:Ljava/lang/Package;
|
|
:Join3
|
|
|
|
|
|
if-eqz v10, :Join4
|
|
if-eqz v9, :Else4
|
|
sget-object v0, LB22881413;->res4:Ljava/lang/RuntimeException;
|
|
:Join4
|
|
|
|
|
|
if-eqz v10, :Join5
|
|
if-eqz v9, :Else5
|
|
sget-object v0, LB22881413;->res5:Ljava/lang/Exception;
|
|
:Join5
|
|
|
|
|
|
if-eqz v10, :Join6
|
|
if-eqz v9, :Else6
|
|
sget-object v0, LB22881413;->res6:Ljava/util/ArrayList;
|
|
:Join6
|
|
|
|
|
|
if-eqz v10, :Join7
|
|
if-eqz v9, :Else7
|
|
sget-object v0, LB22881413;->res7:Ljava/util/LinkedList;
|
|
:Join7
|
|
|
|
|
|
if-eqz v10, :Join8
|
|
if-eqz v9, :Else8
|
|
sget-object v0, LB22881413;->res8:Ljava/lang/Thread;
|
|
:Join8
|
|
|
|
|
|
if-eqz v10, :Join9
|
|
if-eqz v9, :Else9
|
|
sget-object v0, LB22881413;->res9:Ljava/lang/ThreadGroup;
|
|
:Join9
|
|
|
|
|
|
if-eqz v10, :Join10
|
|
if-eqz v9, :Else10
|
|
sget-object v0, LB22881413;->res10:Ljava/lang/Runtime;
|
|
:Join10
|
|
|
|
|
|
goto :InnerMostLoopEnd
|
|
|
|
:Else1
|
|
sget-object v0, LB22881413;->unres1:La/b/c/d1;
|
|
goto :Join1
|
|
|
|
:Else2
|
|
sget-object v0, LB22881413;->unres2:La/b/c/d2;
|
|
goto :Join2
|
|
|
|
:Else3
|
|
sget-object v0, LB22881413;->unres3:La/b/c/d3;
|
|
goto :Join3
|
|
|
|
:Else4
|
|
sget-object v0, LB22881413;->unres4:La/b/c/d4;
|
|
goto :Join4
|
|
|
|
:Else5
|
|
sget-object v0, LB22881413;->unres5:La/b/c/d5;
|
|
goto :Join5
|
|
|
|
:Else6
|
|
sget-object v0, LB22881413;->unres6:La/b/c/d6;
|
|
goto :Join6
|
|
|
|
:Else7
|
|
sget-object v0, LB22881413;->unres7:La/b/c/d7;
|
|
goto :Join7
|
|
|
|
:Else8
|
|
sget-object v0, LB22881413;->unres8:La/b/c/d8;
|
|
goto :Join8
|
|
|
|
:Else9
|
|
sget-object v0, LB22881413;->unres9:La/b/c/d9;
|
|
goto :Join9
|
|
|
|
:Else10
|
|
sget-object v0, LB22881413;->unres10:La/b/c/d10;
|
|
goto :Join10
|
|
|
|
:InnerMostLoopEnd
|
|
|
|
# Loop 8 end of body.
|
|
sget-object v0, LB22881413;->unresBase8:La/b/c/dBase8;
|
|
goto :Loop8
|
|
|
|
:Loop8End
|
|
|
|
# Loop 7 end of body.
|
|
sget-object v0, LB22881413;->unresBase7:La/b/c/dBase7;
|
|
goto :Loop7
|
|
|
|
:Loop7End
|
|
|
|
# Loop 6 end of body.
|
|
sget-object v0, LB22881413;->unresBase6:La/b/c/dBase6;
|
|
goto :Loop6
|
|
|
|
:Loop6End
|
|
|
|
# Loop 5 end of body
|
|
sget-object v0, LB22881413;->unresBase5:La/b/c/dBase5;
|
|
goto :Loop5
|
|
|
|
:Loop5End
|
|
|
|
# Loop 4 end of body
|
|
sget-object v0, LB22881413;->unresBase4:La/b/c/dBase4;
|
|
goto :Loop4
|
|
|
|
:Loop4End
|
|
|
|
# Loop 3 end of body
|
|
sget-object v0, LB22881413;->unresBase3:La/b/c/dBase3;
|
|
goto :Loop3
|
|
|
|
:Loop3End
|
|
|
|
# Loop 2 end of body
|
|
sget-object v0, LB22881413;->unresBase2:La/b/c/dBase2;
|
|
goto :Loop2
|
|
|
|
:Loop2End
|
|
|
|
# Loop 1 end of body
|
|
sget-object v0, LB22881413;->unresBase1:La/b/c/dBase1;
|
|
goto :Loop1
|
|
|
|
:Loop1End
|
|
|
|
return-void
|
|
|
|
.end method
|