unreachable
In ReleaseFast
mode, the optimizer uses the assumption that unreachable
code will never be hit to perform optimizations. However, zig test
even in ReleaseFast
mode still emits unreachable
as calls to panic
.
$ zig test test.zig
1/1 test "basic math"...OK
In fact, this is how assert is implemented:
$ zig test test.zig
1/1 test "this will fail"...reached unreachable code
/deps/zig/docgen_tmp/test.zig:2:14: 0x2052cb in assert (test)
if (!ok) unreachable; // assertion failure
^
/deps/zig/docgen_tmp/test.zig:7:11: 0x204b8e in test "this will fail" (test)
^
/deps/zig/lib/std/special/test_runner.zig:47:28: 0x22bade in std.special.main (test)
} else test_fn.func();
^
/deps/zig/lib/std/start.zig:253:37: 0x20560d in std.start.posixCallMainAndExit (test)
const result = root.main() catch |err| {
/deps/zig/lib/std/start.zig:123:5: 0x20534f in std.start._start (test)
@call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{});
^
/deps/zig/docgen_tmp/test
At Compile-Time
test.zig
$ zig test test.zig
./docgen_tmp/test.zig:10:16: error: unreachable code
assert(@TypeOf(unreachable) == noreturn);
^
./docgen_tmp/test.zig:3:28: note: referenced here
test "type of unreachable" {
^