zig
zig copied to clipboard
Compiler crashes on comparison with error union type.
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