| ... | ... | @@ -398,7 +398,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) { |
| 398 | 398 | else => unreachable, |
| 399 | 399 | } { |
| 400 | 400 | const default_value = if (Impl == PosixThreadImpl) null else 0; |
| 401 | | const bad_fn_ret = "expected return type of startFn to be 'u8', 'noreturn', 'void', or '!void'"; |
| 401 | const bad_fn_ret = "expected return type of startFn to be 'u8', 'noreturn', '!noreturn', 'void', or '!void'"; |
| 402 | 402 | |
| 403 | 403 | switch (@typeInfo(@typeInfo(@TypeOf(f)).Fn.return_type.?)) { |
| 404 | 404 | .NoReturn => { |
| ... | ... | @@ -422,18 +422,21 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) { |
| 422 | 422 | return default_value; |
| 423 | 423 | }, |
| 424 | 424 | .ErrorUnion => |info| { |
| 425 | | if (info.payload != void) { |
| 426 | | @compileError(bad_fn_ret); |
| 427 | | } |
| 428 | | |
| 429 | | @call(.auto, f, args) catch |err| { |
| 430 | | std.debug.print("error: {s}\n", .{@errorName(err)}); |
| 431 | | if (@errorReturnTrace()) |trace| { |
| 432 | | std.debug.dumpStackTrace(trace.*); |
| 433 | | } |
| 434 | | }; |
| 425 | switch (info.payload) { |
| 426 | void, noreturn => { |
| 427 | @call(.auto, f, args) catch |err| { |
| 428 | std.debug.print("error: {s}\n", .{@errorName(err)}); |
| 429 | if (@errorReturnTrace()) |trace| { |
| 430 | std.debug.dumpStackTrace(trace.*); |
| 431 | } |
| 432 | }; |
| 435 | 433 | |
| 436 | | return default_value; |
| 434 | return default_value; |
| 435 | }, |
| 436 | else => { |
| 437 | @compileError(bad_fn_ret); |
| 438 | }, |
| 439 | } |
| 437 | 440 | }, |
| 438 | 441 | else => { |
| 439 | 442 | @compileError(bad_fn_ret); |