summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-07-06 14:00:39 -0700
committerAndreas Gampe <agampe@google.com>2015-07-07 09:46:45 -0700
commitdb05e31018ef4d1b46a43924b370f061c5457626 (patch)
tree84a2f1e4da8b75c9a88f6448cb671c70a7e2bd5d
parentccbbda2b716bcc0dd9ad7b6c7bf9079efa3fca23 (diff)
downloadandroid_art-db05e31018ef4d1b46a43924b370f061c5457626.tar.gz
android_art-db05e31018ef4d1b46a43924b370f061c5457626.tar.bz2
android_art-db05e31018ef4d1b46a43924b370f061c5457626.zip
ART: Fix opsize in LoadArgDirect
If the destination register is a reference, use kReference for the op size. Bug: 22244733 (cherry picked from commit 185a5586c8b796e770e9b4b7ac2befa8ccdaca7e) Change-Id: Idf52f2ee4c65b5dc41cb66257d95281dc6f32255
-rw-r--r--compiler/dex/quick/mir_to_lir.cc3
-rw-r--r--test/800-smali/expected.txt1
-rw-r--r--test/800-smali/smali/b_22244733.smali7
-rw-r--r--test/800-smali/src/Main.java2
4 files changed, 12 insertions, 1 deletions
diff --git a/compiler/dex/quick/mir_to_lir.cc b/compiler/dex/quick/mir_to_lir.cc
index 7ca03cf0ee..c50246d182 100644
--- a/compiler/dex/quick/mir_to_lir.cc
+++ b/compiler/dex/quick/mir_to_lir.cc
@@ -193,7 +193,8 @@ void Mir2Lir::LoadArgDirect(size_t in_position, RegLocation rl_dest) {
}
if (!reg_arg.Valid()) {
- LoadBaseDisp(TargetPtrReg(kSp), offset, rl_dest.reg, rl_dest.wide ? k64 : k32, kNotVolatile);
+ OpSize op_size = rl_dest.wide ? k64 : (rl_dest.ref ? kReference : k32);
+ LoadBaseDisp(TargetPtrReg(kSp), offset, rl_dest.reg, op_size, kNotVolatile);
} else {
if (rl_dest.wide) {
OpRegCopyWide(rl_dest.reg, reg_arg);
diff --git a/test/800-smali/expected.txt b/test/800-smali/expected.txt
index 2196a88ed2..c32bfc298e 100644
--- a/test/800-smali/expected.txt
+++ b/test/800-smali/expected.txt
@@ -23,4 +23,5 @@ b/21863767
b/21886894
b/22080519
b/21645819
+b/22244733
Done!
diff --git a/test/800-smali/smali/b_22244733.smali b/test/800-smali/smali/b_22244733.smali
new file mode 100644
index 0000000000..1b62ad9245
--- /dev/null
+++ b/test/800-smali/smali/b_22244733.smali
@@ -0,0 +1,7 @@
+.class public LB22244733;
+.super Ljava/lang/Object;
+
+.method public static run(Ljava/lang/String;)Ljava/lang/String;
+.registers 2 # One local and one parameter.
+ return-object p0 # Simple return, use the special-method path in Quick.
+.end method
diff --git a/test/800-smali/src/Main.java b/test/800-smali/src/Main.java
index e6f065e557..a7f30d0f0b 100644
--- a/test/800-smali/src/Main.java
+++ b/test/800-smali/src/Main.java
@@ -93,6 +93,8 @@ public class Main {
new NullPointerException(), null));
testCases.add(new TestCase("b/21645819", "B21645819", "run", new Object[] { null },
null, null));
+ testCases.add(new TestCase("b/22244733", "B22244733", "run", new Object[] { "abc" },
+ null, "abc"));
}
public void runTests() {