Skip to content

@errorCast crashes on inferred error set #17353

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
andrewrk opened this issue Oct 1, 2023 · 0 comments · Fixed by #17368
Closed

@errorCast crashes on inferred error set #17353

andrewrk opened this issue Oct 1, 2023 · 0 comments · Fixed by #17368
Labels
bug Observed behavior contradicts documented or intended behavior frontend Tokenization, parsing, AstGen, Sema, and Liveness.
Milestone

Comments

@andrewrk
Copy link
Member

andrewrk commented Oct 1, 2023

Zig Version

0.12.0-dev.705+af40bce08

Steps to Reproduce and Observed Behavior

const std = @import("std");

test {
    const bar: error{Bad}!i32 = @errorCast(foo());
    std.testing.expect((try bar) == 1234);
}

fn foo() !i32 {
    return 1234;
}
$ stage4/bin/zig test test3.zig 
thread 1049783 panic: reached unreachable code
Analyzing test3.zig: test3.zig:test_0
      %6 = dbg_block_begin()
      %7 = dbg_stmt(2, 5)
      %8 = block_comptime({
        %9 = error_set_decl(parent, {
          Bad,
        }) 
        %10 = error_union_type(%9, @InternPool.Index.i32_type) 
        %11 = break(%8, %10)
      }) 
      %12 = dbg_stmt(2, 33)
      %13 = decl_val("foo") 
      %14 = dbg_stmt(2, 47)
      %15 = call(.auto, %13, []) 
    > %16 = extended(error_cast(%8, %15)) 
      %17 = as_node(%8, %16) 
      %18 = dbg_var_val(%17, "bar")
      %19 = save_err_ret_index(%17)
      %20 = dbg_stmt(3, 5)
      %21 = decl_ref("std") 
      %22 = dbg_stmt(3, 8)
      %23 = field_ptr(%21, "testing") 
      %24 = dbg_stmt(3, 16)
      %25 = dbg_stmt(3, 23)
      %26 = field_call(nodiscard .auto, %23, "expect", [
        {
          %27 = dbg_stmt(3, 25)
          %28 = try(%17, {
            %29 = err_union_code(%17) 
            %30 = dbg_stmt(3, 25)
            %31 = ret_node(%29) 
          }) 
          %32 = int(1234)
          %33 = cmp_eq(%28, %32) 
          %34 = break_inline(%26, %33)
        },
      ]) 
      %35 = dbg_block_end()
      %36 = restore_err_ret_index(%5, %4294967211)
      %37 = break(%5, @InternPool.Index.void_value)
    For full context, use the command
      zig ast-check -t test3.zig

  in test3.zig: test3.zig:test_0
    > %5 = block({%6..%37}) 

/home/andy/Downloads/zig/src/type.zig:2874:26: 0x691d46a in errorSetNames (zig)
                .none => unreachable, // unresolved inferred error set
                         ^
/home/andy/Downloads/zig/src/Sema.zig:21782:69: 0x6c9baa6 in zirErrorCast (zig)
        if (!operand_ty.isAnyError(mod) and operand_ty.errorSetNames(mod).len == 0) break :disjoint true;
                                                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1255:65: 0x68d024f in analyzeBodyInner (zig)
                    .error_cast         => try sema.zirErrorCast(         block, extended),
                                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5887:34: 0x72841bb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5870:33: 0x6ccc160 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1578:49: 0x68d7947 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:917:30: 0x6b9ff78 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:4847:21: 0x68a4826 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3442:40: 0x664a7fd in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Compilation.zig:3458:42: 0x66488cd in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/andy/Downloads/zig/src/Compilation.zig:3395:30: 0x647bf5b in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/andy/Downloads/zig/src/Compilation.zig:2194:31: 0x64774ec in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/andy/Downloads/zig/src/main.zig:4194:24: 0x64a6530 in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/andy/Downloads/zig/src/main.zig:3597:17: 0x64c96c1 in buildOutputType (zig)
    updateModule(comp) catch |err| switch (err) {
                ^
/home/andy/Downloads/zig/src/main.zig:275:31: 0x631dba7 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .zig_test);
                              ^
/home/andy/Downloads/zig/src/main.zig:213:20: 0x631ac05 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/andy/Downloads/zig/lib/std/start.zig:486:37: 0x631a61e in main (zig)
    std.os.argv = @as([*][*:0]u8, @ptrCast(c_argv))[0..@as(usize, @intCast(c_argc))];
                                    ^
???:?:?: 0x7f081db3dacd in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7f081db3dacd` was not available, trace may be incomplete

Aborted (core dumped)

Expected Behavior

Test passed.

@andrewrk andrewrk added bug Observed behavior contradicts documented or intended behavior frontend Tokenization, parsing, AstGen, Sema, and Liveness. labels Oct 1, 2023
@andrewrk andrewrk added this to the 0.12.0 milestone Oct 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Observed behavior contradicts documented or intended behavior frontend Tokenization, parsing, AstGen, Sema, and Liveness.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant