diff --git a/src/frontend/ir/basic_block.cpp b/src/frontend/ir/basic_block.cpp index 96bc7dd2..9ac5ee9c 100644 --- a/src/frontend/ir/basic_block.cpp +++ b/src/frontend/ir/basic_block.cpp @@ -84,7 +84,7 @@ const Block::InstructionList& Block::Instructions() const { return instructions; } -Terminal Block::GetTerminal() const { +const Terminal& Block::GetTerminal() const { return terminal; } diff --git a/src/frontend/ir/basic_block.h b/src/frontend/ir/basic_block.h index 40a404d7..6d4953db 100644 --- a/src/frontend/ir/basic_block.h +++ b/src/frontend/ir/basic_block.h @@ -118,7 +118,7 @@ public: const InstructionList& Instructions() const; /// Gets the terminal instruction for this basic block. - Terminal GetTerminal() const; + const Terminal& GetTerminal() const; /// Sets the terminal instruction for this basic block. void SetTerminal(Terminal term); /// Replaces the terminal instruction for this basic block. diff --git a/tests/A64/fuzz_with_unicorn.cpp b/tests/A64/fuzz_with_unicorn.cpp index 9ecc2787..812cb3d4 100644 --- a/tests/A64/fuzz_with_unicorn.cpp +++ b/tests/A64/fuzz_with_unicorn.cpp @@ -66,6 +66,8 @@ restart: bool should_continue = A64::TranslateSingleInstruction(block, location, instruction); if (!should_continue && !is_last_inst) goto restart; + if (!should_continue && boost::get(&block.GetTerminal())) + goto restart; for (const auto& ir_inst : block) if (ir_inst.GetOpcode() == IR::Opcode::A64ExceptionRaised || ir_inst.GetOpcode() == IR::Opcode::A64CallSupervisor) goto restart;