Commit 629aa10c56
Changed files (3)
src
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);
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;
-}
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;