zig icon indicating copy to clipboard operation
zig copied to clipboard

Compiler crashes on comparison with error union type.

Open wrongnull opened this issue 1 year ago • 0 comments

Zig Version

0.14.0-dev.8848+d8c1c9ea6

Steps to Reproduce and Observed Behavior

test.zig:

comptime {
    @compileLog(error.Test == @as(anyerror!i32, 0));
}

zig build-exe test.zig

thread 29563 panic: access of union field 'err_name' while field 'payload' is active
Analyzing test.zig
      %2 = error_value("Test") token_offset:2:23 to :2:27
      %3 = error_union_type(@anyerror_type, @i32_type) node_offset:2:35 to :2:47
      %4 = as_node(%3, @zero) node_offset:2:49 to :2:50
    > %5 = cmp_eq(%2, %4) node_offset:2:17 to :2:51
      %6 = extended(compile_log(%5)) node_offset:2:5 to :2:52
      %7 = ensure_result_used(%6) node_offset:2:5 to :2:52
      %8 = break_inline(%1, @void_value)
    For full context, use the command
      zig ast-check -t test.zig


/home/wrongnull/develop/zig/src/Sema.zig:9304:79: 0x2a5fa25 in analyzeErrUnionCode (zig)
            .name = mod.intern_pool.indexToKey(val.toIntern()).error_union.val.err_name,
                                                                              ^
/home/wrongnull/develop/zig/src/Sema.zig:17383:56: 0x2a5a42a in analyzeCmp (zig)
        const casted_rhs = try sema.analyzeErrUnionCode(block, rhs_src, rhs);
                                                       ^
/home/wrongnull/develop/zig/src/Sema.zig:17288:27: 0x25c7d5b in zirCmpEq (zig)
    return sema.analyzeCmp(block, src, lhs, rhs, op, lhs_src, rhs_src, true);
                          ^
/home/wrongnull/develop/zig/src/Sema.zig:1053:63: 0x211fc7f in analyzeBodyInner (zig)
            .cmp_eq                       => try sema.zirCmpEq(block, inst, .eq, Air.Inst.Tag.fromCmpOp(.eq, block.float_mode == .optimized)),
                                                              ^
/home/wrongnull/develop/zig/src/Sema.zig:937:30: 0x1e057e7 in analyzeInlineBody (zig)
    if (sema.analyzeBodyInner(block, body)) |_| {
                             ^
/home/wrongnull/develop/zig/src/Sema.zig:963:39: 0x1b8ea5e in resolveInlineBody (zig)
    return (try sema.analyzeInlineBody(block, body, break_target)) orelse .unreachable_value;
                                      ^
/home/wrongnull/develop/zig/src/Zcu/PerThread.zig:1182:50: 0x1b8a164 in semaDecl (zig)
    const result_ref = try sema.resolveInlineBody(&block_scope, decl_bodies.value_body, decl_inst);
                                                 ^
/home/wrongnull/develop/zig/src/Zcu/PerThread.zig:563:31: 0x19af73b in ensureDeclAnalyzed (zig)
        break :blk pt.semaDecl(decl_index) catch |err| switch (err) {
                              ^
/home/wrongnull/develop/zig/src/Compilation.zig:3682:34: 0x1deea1e in processOneJob (zig)
            pt.ensureDeclAnalyzed(decl_index) catch |err| switch (err) {
                                 ^
/home/wrongnull/develop/zig/src/Compilation.zig:3548:30: 0x1b6749e in performAllTheWorkInner (zig)
            try processOneJob(@intFromEnum(Zcu.PerThread.Id.main), comp, work_item, main_progress_node);
                             ^
/home/wrongnull/develop/zig/src/Compilation.zig:3427:36: 0x19df9bd in performAllTheWork (zig)
    try comp.performAllTheWorkInner(main_progress_node);
                                   ^
/home/wrongnull/develop/zig/src/Compilation.zig:2212:31: 0x19db979 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/wrongnull/develop/zig/src/main.zig:4436:20: 0x1a0f06d in updateModule (zig)
    try comp.update(prog_node);
                   ^
/home/wrongnull/develop/zig/src/main.zig:3443:21: 0x1a7779f in buildOutputType (zig)
        updateModule(comp, color, root_prog_node) catch |err| switch (err) {
                    ^
/home/wrongnull/develop/zig/src/main.zig:263:31: 0x18bc441 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Exe });
                              ^
/home/wrongnull/develop/zig/src/main.zig:209:20: 0x18b92d5 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/wrongnull/develop/zig/lib/std/start.zig:515:37: 0x18b8d6e in main (zig)
            const result = root.main() catch |err| {
                                    ^
???:?:?: 0x7da244e39c87 in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7da244e39c87` was not available, trace may be incomplete

???:?:?: 0x7da244e39d4b in ??? (libc.so.6)
???:?:?: 0x18b89b4 in ??? (???)
Aborted (core dumped)

Expected Behavior

no crash

wrongnull avatar Jul 13 '24 13:07 wrongnull