diff options
author | Andreas Gampe <agampe@google.com> | 2015-07-09 11:30:14 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2015-07-09 15:18:13 -0700 |
commit | 25e1af5b4e1ce7e03a188ca1d0197a9f5b6acaf8 (patch) | |
tree | 9e1c4605e49d0e9ee7243696d7a8a98e5897c336 /test/800-smali/smali/b_22331663_fail.smali | |
parent | c08e0c73bb397bc535c299dc0b9062f9ee2d86a0 (diff) | |
download | art-25e1af5b4e1ce7e03a188ca1d0197a9f5b6acaf8.zip art-25e1af5b4e1ce7e03a188ca1d0197a9f5b6acaf8.tar.gz art-25e1af5b4e1ce7e03a188ca1d0197a9f5b6acaf8.tar.bz2 |
ART: Change merges with Undefined to Undefined
The result of a merge with an Undefined type should be Undefined.
Conflicts are allowed to be copied around, but Undefined registers
should not be touched at all, except to be written into.
Add a success test case (the register isn't used) and a fail test
case (the register is tried to be copied).
Bug: 22331663
Bug: 22371999
(cherry picked from commit 97a1ff353f254b6e46c7501fe3f0e3254c2517b4)
Change-Id: I9697ce31c1d2ab5aee0433dcf1253bcca79c2983
Diffstat (limited to 'test/800-smali/smali/b_22331663_fail.smali')
-rw-r--r-- | test/800-smali/smali/b_22331663_fail.smali | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/800-smali/smali/b_22331663_fail.smali b/test/800-smali/smali/b_22331663_fail.smali new file mode 100644 index 0000000..0c25e30 --- /dev/null +++ b/test/800-smali/smali/b_22331663_fail.smali @@ -0,0 +1,20 @@ +.class public LB22331663Fail; +.super Ljava/lang/Object; + + +.method public static run(Z)V +.registers 6 + if-eqz v5, :Label1 + + # Construct a java.lang.Object completely. This makes v4 of reference type. + new-instance v4, Ljava/lang/Object; + invoke-direct {v4}, Ljava/lang/Object;-><init>()V + +:Label1 + # At this point, v4 is the merge of Undefined and ReferenceType. The verifier should + # reject any use of this, even a copy. Previously this was a conflict. Conflicts must + # be movable now, so ensure that we do not get a conflict (and then allow the move). + move-object v0, v4 + + return-void +.end method |