diff --git a/src/ir.cpp b/src/ir.cpp index 77631f0666..424fd4dfd8 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -12423,6 +12423,7 @@ bool ir_has_side_effects(IrInstruction *instruction) { case IrInstructionIdCheckSwitchProngs: case IrInstructionIdSetGlobalAlign: case IrInstructionIdSetGlobalSection: + case IrInstructionIdUnwrapErrPayload: return true; case IrInstructionIdPhi: case IrInstructionIdUnOp: @@ -12471,7 +12472,6 @@ bool ir_has_side_effects(IrInstruction *instruction) { case IrInstructionIdFrameAddress: case IrInstructionIdTestErr: case IrInstructionIdUnwrapErrCode: - case IrInstructionIdUnwrapErrPayload: case IrInstructionIdMaybeWrap: case IrInstructionIdErrWrapCode: case IrInstructionIdErrWrapPayload: diff --git a/test/run_tests.cpp b/test/run_tests.cpp index 418ed4f8d0..1dc1beeef7 100644 --- a/test/run_tests.cpp +++ b/test/run_tests.cpp @@ -1896,6 +1896,20 @@ fn unsigned_cast(x: i32) -> u32 { } )SOURCE"); + add_debug_safety_case("unwrap error", R"SOURCE( +pub fn panic(message: []const u8) -> unreachable { + @breakpoint(); + while (true) {} +} +error Whatever; +pub fn main(args: [][]u8) -> %void { + %%bar(); +} +fn bar() -> %void { + return error.Whatever; +} + )SOURCE"); + } //////////////////////////////////////////////////////////////////////////////