From 185a5586c8b796e770e9b4b7ac2befa8ccdaca7e Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 6 Jul 2015 14:00:39 -0700 Subject: [PATCH] ART: Fix opsize in LoadArgDirect If the destination register is a reference, use kReference for the op size. Bug: 22244733 Change-Id: Idf52f2ee4c65b5dc41cb66257d95281dc6f32255 --- compiler/dex/quick/mir_to_lir.cc | 3 ++- test/800-smali/expected.txt | 1 + test/800-smali/smali/b_22244733.smali | 7 +++++++ test/800-smali/src/Main.java | 2 ++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test/800-smali/smali/b_22244733.smali diff --git a/compiler/dex/quick/mir_to_lir.cc b/compiler/dex/quick/mir_to_lir.cc index 7ca03cf0e..c50246d18 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 7059b6b10..fe68c5b9b 100644 --- a/test/800-smali/expected.txt +++ b/test/800-smali/expected.txt @@ -27,4 +27,5 @@ b/22045582 (wide) 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 000000000..1b62ad924 --- /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 30c1b142b..61f0d7b4c 100644 --- a/test/800-smali/src/Main.java +++ b/test/800-smali/src/Main.java @@ -101,6 +101,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() { -- 2.11.0