Fix: correctly destruct VIXL labels.
Bug: 27505766
Change-Id: I077465e3d308f4331e7a861902e05865f9d99835
diff --git a/compiler/utils/arm64/assembler_arm64.cc b/compiler/utils/arm64/assembler_arm64.cc
index eb851f9..eb5112b 100644
--- a/compiler/utils/arm64/assembler_arm64.cc
+++ b/compiler/utils/arm64/assembler_arm64.cc
@@ -32,8 +32,8 @@
#endif
void Arm64Assembler::FinalizeCode() {
- for (Arm64Exception* exception : exception_blocks_) {
- EmitExceptionPoll(exception);
+ for (const std::unique_ptr<Arm64Exception>& exception : exception_blocks_) {
+ EmitExceptionPoll(exception.get());
}
___ FinalizeCode();
}
@@ -611,10 +611,9 @@
void Arm64Assembler::ExceptionPoll(ManagedRegister m_scratch, size_t stack_adjust) {
CHECK_ALIGNED(stack_adjust, kStackAlignment);
Arm64ManagedRegister scratch = m_scratch.AsArm64();
- Arm64Exception *current_exception = new Arm64Exception(scratch, stack_adjust);
- exception_blocks_.push_back(current_exception);
+ exception_blocks_.emplace_back(new Arm64Exception(scratch, stack_adjust));
LoadFromOffset(scratch.AsXRegister(), TR, Thread::ExceptionOffset<8>().Int32Value());
- ___ Cbnz(reg_x(scratch.AsXRegister()), current_exception->Entry());
+ ___ Cbnz(reg_x(scratch.AsXRegister()), exception_blocks_.back()->Entry());
}
void Arm64Assembler::EmitExceptionPoll(Arm64Exception *exception) {