Home | History | Annotate | Download | only in smali
      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