| .class public LB22411633_2; |
| .super Ljava/lang/Object; |
| |
| |
| .method public static run(Z)V |
| .registers 6 |
| # Make v3 & v4 defined, just use null. |
| const v3, 0 |
| const v4, 0 |
| |
| # Allocate a java.lang.Object (do not initialize). |
| new-instance v4, Ljava/lang/Object; |
| |
| # Branch forward. |
| if-eqz v5, :LabelMerge |
| |
| # Create a non-precise object reference. We can do this by merging to objects together |
| # that only have Object as a common ancestor. |
| |
| # Allocate a java.lang.Object and initialize it. |
| new-instance v4, Ljava/lang/Object; |
| invoke-direct {v4}, Ljava/lang/Object;-><init>()V |
| |
| if-nez v5, :LabelMergeObject |
| |
| new-instance v4, Ljava/lang/Integer; |
| invoke-direct {v4}, Ljava/lang/Integer;-><init>()V |
| |
| :LabelMergeObject |
| |
| # Arbitrary work to separate blocks. At this point, v4 is of type Reference<Object>. |
| add-int/lit16 v3, v3, 1 |
| |
| :LabelMerge |
| # Merge the uninitialized Object from line 12 with the reference to Object from 31. Older |
| # rules set any reference merged with Object to Object. This is wrong in the case of the |
| # other reference being an uninitialized reference, as we'd suddenly allow calling on it. |
| |
| # Test whether it's some initialized reference by calling hashCode. This should fail, as we |
| # merged initialized and uninitialized. |
| invoke-virtual {v4}, Ljava/lang/Object;->hashCode()I |
| |
| return-void |
| |
| .end method |