summaryrefslogtreecommitdiffstats
path: root/compiler/dex/dex_to_dex_compiler.cc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-03-06 10:59:06 -0800
committerMathieu Chartier <mathieuc@google.com>2015-03-11 12:43:07 -0700
commit091d238936809f6668ca6b7606c62bc224add430 (patch)
tree90feb09ea9d398f1f80ffa407747496e57e592fe /compiler/dex/dex_to_dex_compiler.cc
parent637455782147a41fbde2e284c49ca5e02d3444c2 (diff)
downloadandroid_art-091d238936809f6668ca6b7606c62bc224add430.tar.gz
android_art-091d238936809f6668ca6b7606c62bc224add430.tar.bz2
android_art-091d238936809f6668ca6b7606c62bc224add430.zip
Fix incompatible class change error for JIT stress mode
There was a problem with miranda methods, when we would dequicken to one of these, it wouldn't resolve as virtual during the method lowering resolve. The solution is to try resolving as interface if we fail to resolve as virtual. Fixed a bug in dequickening where unreachable register lines with quick invokes would cause CHECK failuers. In this case we punt to the interpreter (test 435-try-*). Added test regression test. Example failure: java.lang.IncompatibleClassChangeError: The method 'void Main$TheInterface.m()' was expected to be of type virtual but instead was found to be of type interface (declaration of 'java.lang.reflect.ArtMethod' appears in out/host/linux-x86/framework/core-libart-hostdex.jar) at Main.DoStuff(Main.java:37) at Main.main(Main.java:44) Bug: 17950037 Change-Id: I39c32cc8849bf02032a4f61a7ce57462b7fcac75
Diffstat (limited to 'compiler/dex/dex_to_dex_compiler.cc')
-rw-r--r--compiler/dex/dex_to_dex_compiler.cc6
1 files changed, 2 insertions, 4 deletions
diff --git a/compiler/dex/dex_to_dex_compiler.cc b/compiler/dex/dex_to_dex_compiler.cc
index 7e916bee4a..fcefb6fbfc 100644
--- a/compiler/dex/dex_to_dex_compiler.cc
+++ b/compiler/dex/dex_to_dex_compiler.cc
@@ -252,10 +252,8 @@ void DexCompiler::CompileInstanceFieldAccess(Instruction* inst,
}
}
-void DexCompiler::CompileInvokeVirtual(Instruction* inst,
- uint32_t dex_pc,
- Instruction::Code new_opcode,
- bool is_range) {
+void DexCompiler::CompileInvokeVirtual(Instruction* inst, uint32_t dex_pc,
+ Instruction::Code new_opcode, bool is_range) {
if (!kEnableQuickening || !PerformOptimizations()) {
return;
}