diff options
| author | 2012-09-20 15:50:03 -0700 | |
|---|---|---|
| committer | 2012-09-20 15:55:26 -0700 | |
| commit | 6ec5e23195479f2dc4c1d84a2594fd67553ce826 (patch) | |
| tree | 0992b76df7b10d39792089095a520ffa2bf74638 /src/compiler/codegen/MethodBitcode.cc | |
| parent | 46c6bb2f52cef82660b9be7576b49f83845df93a (diff) | |
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
Diffstat (limited to 'src/compiler/codegen/MethodBitcode.cc')
| -rw-r--r-- | src/compiler/codegen/MethodBitcode.cc | 5 |
1 files changed, 4 insertions, 1 deletions
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]) { |