Skip to content

else => unreachable should be handled like catch unreachable when the type is an error set #3418

Description

@andrewrk
test "else => unreachable hitting error" {
    foo() catch |e| switch (e) {
        error.NotThisOne => {},
        else => unreachable,
    };
}

const E = error{
    NotThisOne,
    OtherOne,
};

fn foo() E!void {
    return error.OtherOne;
}

output:

1/1 test "else => unreachable hitting error"...reached unreachable code
/home/andy/Downloads/zig/build/test.zig:4:17: 0x2055b6 in test "else => unreachable hitting error" (test)
        else => unreachable,
                ^
/home/andy/Downloads/zig/lib/std/special/test_runner.zig:13:25: 0x228471 in std.special.main (test)
        if (test_fn.func()) |_| {
                        ^
/home/andy/Downloads/zig/lib/std/special/start.zig:204:37: 0x2272e5 in std.special.posixCallMainAndExit (test)
            const result = root.main() catch |err| {
                                    ^
/home/andy/Downloads/zig/lib/std/special/start.zig:102:5: 0x22715f in std.special._start (test)
    @noInlineCall(posixCallMainAndExit);
    ^

Tests failed. Use the following command to reproduce the failure:
/home/andy/Downloads/zig/build/zig-cache/o/4P7VSNxF-q2bqL786SGteb7Jk6o2zFfGEcF1BiRIoO8a0yEuWJi1uW37KiUFAk2X/test

Expected output: something like this:

1/1 test "else => unreachable hitting error"...attempt to unwrap error: OtherOne
/home/andy/Downloads/zig/build/test.zig:11:5: 0x2056f8 in foo (test)
    return error.OtherOne;
    ^
???:?:?: 0x20579c in ??? (???)


/home/andy/Downloads/zig/build/test.zig:4:13: 0x2055b2 in test "else => unreachable hitting error" (test)
    else => unreachable;
            ^
/home/andy/Downloads/zig/lib/std/special/test_runner.zig:13:25: 0x228501 in std.special.main (test)
        if (test_fn.func()) |_| {
                        ^
/home/andy/Downloads/zig/lib/std/special/start.zig:204:37: 0x227375 in std.special.posixCallMainAndExit (test)
            const result = root.main() catch |err| {
                                    ^
/home/andy/Downloads/zig/lib/std/special/start.zig:102:5: 0x2271ef in std.special._start (test)
    @noInlineCall(posixCallMainAndExit);
    ^

Tests failed. Use the following command to reproduce the failure:
/home/andy/Downloads/zig/build/zig-cache/o/ESeTr9sZaQtjsYqR6CNXHF8ySsYnUhoGitQryIvDP54IW8FOmCiGHivusuRweVdD/test

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementSolving this issue will likely involve adding new logic or components to the codebase.stage1The process of building from source via WebAssembly and the C backend.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions