diff --git a/src/codegen.cpp b/src/codegen.cpp index d92a34ee13..26306ac0bc 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1879,7 +1879,7 @@ static LLVMValueRef ir_render_err_to_int(CodeGen *g, IrExecutable *executable, I static LLVMValueRef ir_render_unreachable(CodeGen *g, IrExecutable *executable, IrInstructionUnreachable *unreachable_instruction) { - if (ir_want_debug_safety(g, &unreachable_instruction->base) || g->is_test_build) { + if (ir_want_debug_safety(g, &unreachable_instruction->base)) { gen_debug_safety_crash(g, PanicMsgIdUnreachable); } else { LLVMBuildUnreachable(g->builder); diff --git a/std/debug.zig b/std/debug.zig index 7652807ca3..f147e91324 100644 --- a/std/debug.zig +++ b/std/debug.zig @@ -12,7 +12,15 @@ error InvalidDebugInfo; error UnsupportedDebugInfo; pub fn assert(ok: bool) { - if (!ok) unreachable // assertion failure + if (!ok) { + // In ReleaseFast test mode, we still want assert(false) to crash, so + // we insert an explicit call to @panic instead of unreachable. + if (builtin.is_test) { + @panic("assertion failure") + } else { + unreachable // assertion failure + } + } } var panicking = false; diff --git a/std/special/compiler_rt/index.zig b/std/special/compiler_rt/index.zig index eabecc7970..69b6ebece2 100644 --- a/std/special/compiler_rt/index.zig +++ b/std/special/compiler_rt/index.zig @@ -17,6 +17,7 @@ comptime { const builtin = @import("builtin"); const is_test = builtin.is_test; +const assert = @import("../../debug.zig").assert; const __udivmoddi4 = @import("udivmoddi4.zig").__udivmoddi4; @@ -292,8 +293,3 @@ fn test_one_udivsi3(a: u32, b: u32, expected_q: u32) { const q: u32 = __udivsi3(a, b); assert(q == expected_q); } - - -fn assert(ok: bool) { - if (!ok) unreachable; -}