.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