diff options
| author | Bram <ogus.bram@gmail.com> | 2024-06-01 15:04:02 -0400 |
|---|---|---|
| committer | Matthew Lugg <mlugg@mlugg.co.uk> | 2024-06-23 04:35:00 +0100 |
| commit | 5f589562646b972e4f177d60c7da37e872991d29 (patch) | |
| tree | cf33366a36e188ba2345894c43ee362918aff428 /lib/std/Thread.zig | |
| parent | f1b6f1aeb38452fce2c1185326556566cacee2ca (diff) | |
| download | zig-5f589562646b972e4f177d60c7da37e872991d29.tar.gz zig-5f589562646b972e4f177d60c7da37e872991d29.zip | |
std: Extended type checks for Thread startFn return type
Diffstat (limited to 'lib/std/Thread.zig')
| -rw-r--r-- | lib/std/Thread.zig | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index adb822173e..5bfaef6127 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -398,7 +398,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) { else => unreachable, } { const default_value = if (Impl == PosixThreadImpl) null else 0; - const bad_fn_ret = "expected return type of startFn to be 'u8', 'noreturn', 'void', or '!void'"; + const bad_fn_ret = "expected return type of startFn to be 'u8', 'noreturn', '!noreturn', 'void', or '!void'"; switch (@typeInfo(@typeInfo(@TypeOf(f)).Fn.return_type.?)) { .NoReturn => { @@ -422,18 +422,21 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) { return default_value; }, .ErrorUnion => |info| { - if (info.payload != void) { - @compileError(bad_fn_ret); - } - - @call(.auto, f, args) catch |err| { - std.debug.print("error: {s}\n", .{@errorName(err)}); - if (@errorReturnTrace()) |trace| { - std.debug.dumpStackTrace(trace.*); - } - }; + switch (info.payload) { + void, noreturn => { + @call(.auto, f, args) catch |err| { + std.debug.print("error: {s}\n", .{@errorName(err)}); + if (@errorReturnTrace()) |trace| { + std.debug.dumpStackTrace(trace.*); + } + }; - return default_value; + return default_value; + }, + else => { + @compileError(bad_fn_ret); + }, + } }, else => { @compileError(bad_fn_ret); |
