diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-04-08 16:40:59 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-04-08 16:40:59 -0400 |
| commit | 9e98ea552dcf03a4a05a920c8f027d09130dd688 (patch) | |
| tree | fa726bca66597c3734038ab2cb41cfd6990f5a97 /test | |
| parent | ada441157f4a388950946e7f4db65c273f23c063 (diff) | |
| download | zig-9e98ea552dcf03a4a05a920c8f027d09130dd688.tar.gz zig-9e98ea552dcf03a4a05a920c8f027d09130dd688.zip | |
fix calling convention at callsite of zig-generated fns
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases/coroutines.zig | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/cases/coroutines.zig b/test/cases/coroutines.zig index 922c1a7e58..5537323734 100644 --- a/test/cases/coroutines.zig +++ b/test/cases/coroutines.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const builtin = @import("builtin"); const assert = std.debug.assert; var x: i32 = 1; @@ -189,3 +190,30 @@ async fn failing() !void { suspend; return error.Fail; } + +test "error return trace across suspend points" { + const p = nonFailing(); + resume p; + const p2 = try async<std.debug.global_allocator> printTrace(p); + cancel p2; +} + +fn nonFailing() promise->error!void { + return async<std.debug.global_allocator> suspendThenFail() catch unreachable; +} + +async fn suspendThenFail() error!void { + suspend; + return error.Fail; +} + +async fn printTrace(p: promise->error!void) void { + (await p) catch |e| { + std.debug.assert(e == error.Fail); + if (@errorReturnTrace()) |trace| { + assert(trace.index == 1); + } else if (builtin.mode != builtin.Mode.ReleaseFast) { + @panic("expected return trace"); + } + }; +} |
