From c4cff443b81b81711c8ed7367f05fe7fdffe8239 Mon Sep 17 00:00:00 2001 From: dweiller <4678790+dweiller@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:29:44 +1100 Subject: [PATCH] test/stack_traces.zig: add err union switch case --- test/stack_traces.zig | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/test/stack_traces.zig b/test/stack_traces.zig index 467c53bcb9..5126e3a538 100644 --- a/test/stack_traces.zig +++ b/test/stack_traces.zig @@ -807,4 +807,59 @@ pub fn addCases(cases: *tests.StackTracesContext) void { , }, }); + cases.addCase(.{ + .name = "error union switch with call operand", + .source = + \\pub fn main() !void { + \\ try foo(); + \\ return error.TheSkyIsFalling; + \\} + \\ + \\noinline fn failure() error{ Fatal, NonFatal }!void { + \\ return error.NonFatal; + \\} + \\ + \\fn foo() error{Fatal}!void { + \\ return failure() catch |err| switch (err) { + \\ error.Fatal => return error.Fatal, + \\ error.NonFatal => return, + \\ }; + \\} + , + .Debug = .{ + .expect = + \\error: TheSkyIsFalling + \\source.zig:3:5: [address] in main (test) + \\ return error.TheSkyIsFalling; + \\ ^ + \\ + , + }, + .ReleaseSafe = .{ + .exclude_os = &.{ + .windows, // TODO + .linux, // defeated by aggressive inlining + }, + .expect = + \\error: TheSkyIsFalling + \\source.zig:3:5: [address] in [function] + \\ return error.TheSkyIsFalling; + \\ ^ + \\ + , + .error_tracing = true, + }, + .ReleaseFast = .{ + .expect = + \\error: TheSkyIsFalling + \\ + , + }, + .ReleaseSmall = .{ + .expect = + \\error: TheSkyIsFalling + \\ + , + }, + }); }