From 6ec5e23195479f2dc4c1d84a2594fd67553ce826 Mon Sep 17 00:00:00 2001 From: buzbee Date: Thu, 20 Sep 2012 15:50:03 -0700 Subject: Quick compiler: fix array undershoot Normal Dalvik vRegs range from 0..n. However, we use negative vReg positions to denote special values such as Method* and other things we might wish to promote. Failed to take this into account for some shadow frame bitcode conversion stuff. Yet another datapoint supporting the upcoming C++ification. Change-Id: I3a1714ac1a80763c048dda3ae95125fc6082202b --- src/compiler/codegen/MethodBitcode.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/compiler/codegen/MethodBitcode.cc') diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc index 31fc9cf29e..f4b8461654 100644 --- a/src/compiler/codegen/MethodBitcode.cc +++ b/src/compiler/codegen/MethodBitcode.cc @@ -1796,7 +1796,10 @@ bool methodBlockBitcodeConversion(CompilationUnit* cUnit, BasicBlock* bb) cUnit->numDalvikRegisters, true, kAllocMisc); for (int i = 0; i < cUnit->numSSARegs; i++) { - canBeRef[SRegToVReg(cUnit, i)] |= cUnit->regLocation[i].ref; + int vReg = SRegToVReg(cUnit, i); + if (vReg > SSA_METHOD_BASEREG) { + canBeRef[SRegToVReg(cUnit, i)] |= cUnit->regLocation[i].ref; + } } for (int i = 0; i < cUnit->numDalvikRegisters; i++) { if (canBeRef[i]) { -- cgit v1.2.3-59-g8ed1b