aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Petacat <jay@jayschwa.net>2022-05-04 10:43:27 -0400
committerGitHub <noreply@github.com>2022-05-04 09:43:27 -0500
commit28ef79ea808fdb8e00b6d88d1565314a9e412768 (patch)
treeef5a6579b9154d18234dc4736ac75468da7e0ccf
parent3ed9ef3e6bed3fef6d6cad07920d08b28e20ec3e (diff)
downloadzig-28ef79ea808fdb8e00b6d88d1565314a9e412768.tar.gz
zig-28ef79ea808fdb8e00b6d88d1565314a9e412768.zip
std: Single-threaded `panicImpl` sleep is unreachable (#11569)
Adding `unreachable` prevents the futex code from being inspected during a single-threaded build. Without futex, first draft BYOS packages don't need to implement `nanosleep` to get a single-threaded "hello world" program working. Use of `assert()` did not achieve the desired effect of avoiding futex in a single-threaded build.
-rw-r--r--lib/std/debug.zig1
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/std/debug.zig b/lib/std/debug.zig
index 347a9c433d..1a34d67f9d 100644
--- a/lib/std/debug.zig
+++ b/lib/std/debug.zig
@@ -340,6 +340,7 @@ pub fn panicImpl(trace: ?*const std.builtin.StackTrace, first_trace_addr: ?usize
if (panicking.fetchSub(1, .SeqCst) != 1) {
// Another thread is panicking, wait for the last one to finish
// and call abort()
+ if (builtin.single_threaded) unreachable;
// Sleep forever without hammering the CPU
var futex = std.atomic.Atomic(u32).init(0);