| ... | @@ -807,4 +807,59 @@ pub fn addCases(cases: *tests.StackTracesContext) void { | ... | @@ -807,4 +807,59 @@ pub fn addCases(cases: *tests.StackTracesContext) void { |
| 807 | , | 807 | , |
| 808 | }, | 808 | }, |
| 809 | }); | 809 | }); |
| | 810 | cases.addCase(.{ |
| | 811 | .name = "error union switch with call operand", |
| | 812 | .source = |
| | 813 | \\pub fn main() !void { |
| | 814 | \\ try foo(); |
| | 815 | \\ return error.TheSkyIsFalling; |
| | 816 | \\} |
| | 817 | \\ |
| | 818 | \\noinline fn failure() error{ Fatal, NonFatal }!void { |
| | 819 | \\ return error.NonFatal; |
| | 820 | \\} |
| | 821 | \\ |
| | 822 | \\fn foo() error{Fatal}!void { |
| | 823 | \\ return failure() catch |err| switch (err) { |
| | 824 | \\ error.Fatal => return error.Fatal, |
| | 825 | \\ error.NonFatal => return, |
| | 826 | \\ }; |
| | 827 | \\} |
| | 828 | , |
| | 829 | .Debug = .{ |
| | 830 | .expect = |
| | 831 | \\error: TheSkyIsFalling |
| | 832 | \\source.zig:3:5: [address] in main (test) |
| | 833 | \\ return error.TheSkyIsFalling; |
| | 834 | \\ ^ |
| | 835 | \\ |
| | 836 | , |
| | 837 | }, |
| | 838 | .ReleaseSafe = .{ |
| | 839 | .exclude_os = &.{ |
| | 840 | .windows, // TODO |
| | 841 | .linux, // defeated by aggressive inlining |
| | 842 | }, |
| | 843 | .expect = |
| | 844 | \\error: TheSkyIsFalling |
| | 845 | \\source.zig:3:5: [address] in [function] |
| | 846 | \\ return error.TheSkyIsFalling; |
| | 847 | \\ ^ |
| | 848 | \\ |
| | 849 | , |
| | 850 | .error_tracing = true, |
| | 851 | }, |
| | 852 | .ReleaseFast = .{ |
| | 853 | .expect = |
| | 854 | \\error: TheSkyIsFalling |
| | 855 | \\ |
| | 856 | , |
| | 857 | }, |
| | 858 | .ReleaseSmall = .{ |
| | 859 | .expect = |
| | 860 | \\error: TheSkyIsFalling |
| | 861 | \\ |
| | 862 | , |
| | 863 | }, |
| | 864 | }); |
| 810 | } | 865 | } |