-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.Tokenization, parsing, AstGen, Sema, and Liveness.
Milestone
Description
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.
Metadata
Metadata
Assignees
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.Tokenization, parsing, AstGen, Sema, and Liveness.