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.

    1. $ zig test test.zig
    2. 1/1 test "basic math"... OK

    In fact, this is how std.debug.assert is implemented:

    1. $ zig test test.zig
    2. 1/1 test "this will fail"... reached unreachable code
    3. /home/andy/Downloads/zig/docgen_tmp/test.zig:3:14: 0x206dab in assert (test)
    4. if (!ok) unreachable; // assertion failure
    5. ^
    6. assert(false);
    7. ^
    8. /home/andy/Downloads/zig/lib/std/special/test_runner.zig:61:28: 0x22d9a1 in std.special.main (test)
    9. } else test_fn.func();
    10. ^
    11. /home/andy/Downloads/zig/lib/std/start.zig:334:37: 0x2072ad in std.start.posixCallMainAndExit (test)
    12. ^
    13. /home/andy/Downloads/zig/lib/std/start.zig:162:5: 0x206fe2 in std.start._start (test)
    14. @call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{});
    15. error: the following test command crashed:
    16. docgen_tmp/zig-cache/o/2e7f715609483f0cd9100db66b70c1a0/test

    At Compile-Time

    test.zig

    1. $ zig test test.zig
    2. ./docgen_tmp/test.zig:10:16: error: unreachable code
    3. assert(@TypeOf(unreachable) == noreturn);
    4. ^
    5. ./docgen_tmp/test.zig:3:28: note: referenced here
    6. test "type of unreachable" {
    7. ^