summaryrefslogtreecommitdiff
path: root/compiler/optimizing/register_allocator.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2017-10-11 20:39:54 +0100
committer Vladimir Marko <vmarko@google.com> 2017-10-12 10:58:02 +0100
commitbea75ff0835324076fed6ff5d443b9e02c65d223 (patch)
tree61ae2e8fe552938fcae1e277f51823ba2a4f6e74 /compiler/optimizing/register_allocator.cc
parent567563a9c6ccc06c2c9889d1c3c4feaa3c2b2dab (diff)
Fix using LiveIntervals beyond their lifetime.
Fixes a bug introduced by https://android-review.googlesource.com/504041 Test: test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 64312607 Change-Id: I7fd2d55c2a657f736eaed7c94c41d1237ae2ec0b
Diffstat (limited to 'compiler/optimizing/register_allocator.cc')
-rw-r--r--compiler/optimizing/register_allocator.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/optimizing/register_allocator.cc b/compiler/optimizing/register_allocator.cc
index ece9904426..86e971353f 100644
--- a/compiler/optimizing/register_allocator.cc
+++ b/compiler/optimizing/register_allocator.cc
@@ -53,6 +53,21 @@ std::unique_ptr<RegisterAllocator> RegisterAllocator::Create(ScopedArenaAllocato
}
}
+RegisterAllocator::~RegisterAllocator() {
+ if (kIsDebugBuild) {
+ // Poison live interval pointers with "Error: BAD 71ve1nt3rval."
+ LiveInterval* bad_live_interval = reinterpret_cast<LiveInterval*>(0xebad7113u);
+ for (HBasicBlock* block : codegen_->GetGraph()->GetLinearOrder()) {
+ for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) {
+ it.Current()->SetLiveInterval(bad_live_interval);
+ }
+ for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) {
+ it.Current()->SetLiveInterval(bad_live_interval);
+ }
+ }
+ }
+}
+
bool RegisterAllocator::CanAllocateRegistersFor(const HGraph& graph ATTRIBUTE_UNUSED,
InstructionSet instruction_set) {
return instruction_set == kArm