Andreas Gampe | bb18a03 | 2016-03-22 20:34:25 -0700 | [diff] [blame] | 1 | .class public LB27799205_3; |
| 2 | .super Ljava/lang/Object; |
| 3 | |
| 4 | # A class with an unresolved array type should not fail hard (unless it's a primitive-type access). |
| 5 | # Make sure that merging is pro-active. |
| 6 | |
| 7 | .method public static run()V |
| 8 | .registers 1 |
| 9 | return-void |
| 10 | .end method |
| 11 | |
| 12 | # Use some non-object non-array input (non-Object because the merge should be Object). |
| 13 | .method public static test(Ljava/lang/Integer;[Ldo/not/resolve/K;Z)V |
| 14 | .registers 6 |
| 15 | # Make v0, v1 and v2 null. We'll use v0 as a merge of the inputs, v1 as null, and v2 as 0. |
| 16 | const v0, 0 |
| 17 | const v1, 0 |
| 18 | const v2, 0 |
| 19 | |
| 20 | # Conditional jump so we have a merge point. |
| 21 | if-eqz v5, :LabelSelectUnresolved |
| 22 | |
| 23 | :LabelSelectResolved |
| 24 | move-object v0, v3 |
| 25 | goto :LabelMerged |
| 26 | |
| 27 | :LabelSelectUnresolved |
| 28 | move-object v0, v4 |
| 29 | goto :LabelMerged |
| 30 | |
| 31 | :LabelMerged |
| 32 | # At this point, v0 should be Object. |
| 33 | |
| 34 | # Test aput-object: v0[v2] = v1. Should fail for v0 not being an array. |
| 35 | aput-object v1, v0, v2 |
| 36 | |
| 37 | return-void |
| 38 | |
| 39 | .end method |