From 071d43576b4a9ede8ef2a4289c5d79b1ae612c7a Mon Sep 17 00:00:00 2001 From: Aart Bik Date: Wed, 21 Mar 2018 14:07:12 -0700 Subject: Code sinking bug fix. Rationale: Don't move an instruction that can throw into a block that may catch. Bug: b/75971227 Test: test-art-host Change-Id: I29b8f32854aa83e2fb5018d77b9ee12787efbef3 --- compiler/optimizing/code_sinking.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'compiler/optimizing/code_sinking.cc') diff --git a/compiler/optimizing/code_sinking.cc b/compiler/optimizing/code_sinking.cc index f4760d661f..2e31d35584 100644 --- a/compiler/optimizing/code_sinking.cc +++ b/compiler/optimizing/code_sinking.cc @@ -214,6 +214,11 @@ static HInstruction* FindIdealPosition(HInstruction* instruction, DCHECK(target_block != nullptr); } + // Bail if the instruction can throw and we are about to move into a catch block. + if (instruction->CanThrow() && target_block->GetTryCatchInformation() != nullptr) { + return nullptr; + } + // Find insertion position. No need to filter anymore, as we have found a // target block. HInstruction* insert_pos = nullptr; -- cgit v1.2.3-59-g8ed1b