Skip to content
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

compiler segfault #16874

Closed
dweiller opened this issue Aug 18, 2023 · 3 comments
Closed

compiler segfault #16874

dweiller opened this issue Aug 18, 2023 · 3 comments
Labels
bug Observed behavior contradicts documented or intended behavior

Comments

@dweiller
Copy link
Contributor

dweiller commented Aug 18, 2023

Zig Version

0.11.0 and 0.12.0-dev.125+7ef1eb1c2

Steps to Reproduce and Observed Behavior

Clone https://github.com/dweiller/zubench (commit 83cbcff) and run zig build run. More minimally, run either of

zig test examples/fib.zig --test-runner src/bench_runner.zig --mod zubench::src/bench.zig --deps zubench
zig build-exe src/bench_runner.zig --mod @bench:zubench:examples/fib_build.zig --mod zubench::src/bench.zig --deps @bench,zubench

Expected Behavior

With zig build run there should be no error, with the zig test line above there should be a failing test (the failing one is removed with --test-filter fib); the build-exe should compile without issue.

I intend to update this issue after attempting to bisect the zig compiler to work out exactly when this segfault was introduced I have bisected the issue - details below.

@dweiller dweiller added the bug Observed behavior contradicts documented or intended behavior label Aug 18, 2023
@ianprime0509
Copy link
Contributor

Here's the output I get with a debug build of Zig 0.12.0-dev.125+7ef1eb1c2:

thread 9997 panic: InternPool.getCoerced of simple_value not implemented from anon_struct_type to struct_type
Analyzing src/bench_runner.zig: bench_runner.zig:testRunner
      %212 = dbg_block_begin()
      %213 = dbg_stmt(17, 9)
      %230 = block({
        %215 = dbg_stmt(17, 32)
        %216 = decl_ref("std") 
        %217 = dbg_stmt(17, 35)
        %218 = field_ptr(%216, "mem") 
        %219 = dbg_stmt(17, 39)
        %220 = dbg_stmt(17, 53)
        %221 = field_call(.auto, %218, "indexOfScalar", [
          {
            %222 = break_inline(%221, @InternPool.Index.u8_type)
          },
          {
            %223 = dbg_stmt(17, 65)
            %224 = field_val(%209, "name") 
            %225 = break_inline(%221, %224)
          },
          {
            %226 = int(46)
            %227 = break_inline(%221, %226)
          },
        ]) 
        %228 = is_non_null(%221) 
        %229 = condbr(%228, {
          %231 = dbg_block_begin()
          %232 = optional_payload_unsafe(%221) 
          %233 = dbg_var_val(%232, "index")
          %235 = dbg_stmt(18, 20)
          %236 = field_ptr(%234, "name") 
          %237 = dbg_stmt(18, 32)
          %238 = add(%232, @InternPool.Index.one) 
          %239 = dbg_stmt(18, 25)
          %240 = slice_start(%236, %238) 
          %242 = dbg_block_end()
          %248 = break(%230, %240)
        }, {
          %243 = dbg_block_begin()
          %244 = dbg_stmt(20, 20)
          %245 = field_val(%209, "name") 
          %247 = dbg_block_end()
          %249 = break(%230, %245)
        }) 
      }) 
      %251 = save_err_ret_index(%230)
      %252 = dbg_var_val(%230, "bench_name")
      %253 = dbg_stmt(21, 9)
      %254 = alloc_inferred_mut() 
      %255 = dbg_stmt(21, 25)
      %256 = decl_ref("bench") 
      %257 = dbg_stmt(21, 34)
      %258 = dbg_stmt(21, 44)
      %259 = field_call(.auto, %256, "Benchmark", [
        {
          %260 = decl_ref("std") 
          %261 = dbg_stmt(21, 48)
          %262 = field_ptr(%260, "meta") 
          %263 = dbg_stmt(21, 53)
          %264 = dbg_stmt(21, 59)
          %265 = field_call(.auto, %262, "Child", [
            {
              %266 = typeof_builtin({
                %267 = dbg_stmt(21, 75)
                %268 = field_val(%209, "func") 
                %269 = break_inline(%266, %268)
              }) 
              %270 = break_inline(%265, %266)
            },
          ]) 
          %271 = break_inline(%259, %265)
        },
      ]) 
      %272 = ref(%259) 
      %273 = dbg_stmt(21, 83)
      %274 = dbg_stmt(21, 88)
    > %275 = field_call(.auto, %272, "init", [
        {
          %276 = break_inline(%275, %101)
        },
        {
          %277 = break_inline(%275, %230)
        },
        {
          %278 = dbg_stmt(24, 20)
          %279 = field_val(%209, "func") 
          %280 = break_inline(%275, %279)
        },
        {
          %281 = break_inline(%275, @InternPool.Index.empty_struct)
        },
        {
          %282 = break_inline(%275, %110)
        },
        {
          %283 = break_inline(%275, %114)
        },
        {
          %284 = break_inline(%275, %152)
        },
      ]) 
      %285 = try(%275, {
        %286 = err_union_code(%275) 
        %287 = defer({
          %191 = dbg_stmt(14, 11)
          %192 = dbg_stmt(14, 18)
          %193 = dbg_stmt(14, 25)
          %194 = field_call(nodiscard .auto, %162, "deinit", []) 
          %195 = break_inline(%0, @InternPool.Index.void_value)
        })
        %288 = defer({
          %92 = dbg_stmt(3, 11)
          %93 = dbg_stmt(3, 18)
          %94 = dbg_stmt(3, 25)
          %95 = field_call(.auto, %80, "deinit", []) 
          %96 = ensure_result_non_error(%95) 
          %97 = break_inline(%0, @InternPool.Index.void_value)
        })
        %289 = dbg_stmt(21, 25)
        %290 = ret_node(%286) 
      }) 
      %291 = store_to_inferred_ptr(%254, %285)
      %292 = resolve_inferred_alloc(%254) 
      %293 = dbg_var_ptr(%254, "benchmark")
      %299 = dbg_stmt(31, 9)
      %300 = dbg_stmt(31, 16)
      %301 = dbg_stmt(31, 37)
      %302 = field_call(nodiscard .auto, %162, "appendAssumeCapacity", [
        {
          %303 = dbg_stmt(31, 38)
          %304 = dbg_stmt(31, 51)
          %305 = dbg_stmt(31, 55)
          %306 = field_call(.auto, %254, "run", []) 
          %307 = try(%306, {
            %308 = err_union_code(%306) 
            %309 = defer({
              %294 = dbg_stmt(30, 15)
              %295 = dbg_stmt(30, 24)
              %296 = dbg_stmt(30, 31)
              %297 = field_call(nodiscard .auto, %254, "deinit", []) 
              %298 = break_inline(%0, @InternPool.Index.void_value)
            })
            %310 = defer({
              %191 = dbg_stmt(14, 11)
              %192 = dbg_stmt(14, 18)
              %193 = dbg_stmt(14, 25)
              %194 = field_call(nodiscard .auto, %162, "deinit", []) 
              %195 = break_inline(%0, @InternPool.Index.void_value)
            })
            %311 = defer({
              %92 = dbg_stmt(3, 11)
              %93 = dbg_stmt(3, 18)
              %94 = dbg_stmt(3, 25)
              %95 = field_call(.auto, %80, "deinit", []) 
              %96 = ensure_result_non_error(%95) 
              %97 = break_inline(%0, @InternPool.Index.void_value)
            })
            %312 = dbg_stmt(31, 38)
            %313 = ret_node(%308) 
          }) 
          %314 = break_inline(%302, %307)
        },
      ]) 
      %315 = dbg_block_end()
      %316 = defer({
        %294 = dbg_stmt(30, 15)
        %295 = dbg_stmt(30, 24)
        %296 = dbg_stmt(30, 31)
        %297 = field_call(nodiscard .auto, %254, "deinit", []) 
        %298 = break_inline(%0, @InternPool.Index.void_value)
      })
      %317 = restore_err_ret_index(%211, %4294967211)
      %318 = break(%211, @InternPool.Index.void_value)
    For full context, use the command
      zig ast-check -t src/bench_runner.zig

  in src/bench_runner.zig: bench_runner.zig:testRunner
    > %211 = block({%212..%318}) 
  in src/bench_runner.zig: bench_runner.zig:testRunner
    > %206 = condbr(%205, {%208..%320}, {%321}) 
  in src/bench_runner.zig: bench_runner.zig:testRunner
    > %207 = block({%205, %206}) 
  in src/bench_runner.zig: bench_runner.zig:testRunner
    > %203 = loop({%204..%324}) 
  in src/bench_runner.zig: bench_runner.zig:testRunner
    > %77 = block({%78..%388}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %51 = try(%50, {%52..%54}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %44 = condbr(%43, {%46..%66}, {%56..%67}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %45 = block({%40..%44}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %37 = block({%38..%71}) 
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2849 = is_non_err(%2848) node_offset:574:28 to :574:45
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2851 = block({%2845..%2850}) node_offset:574:28 to :574:45
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2842 = block({%2843..%2989}) node_offset:573:24 to :573:25
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2753 = switch_block(%2751,
        else => {%2992..%2998},
        %2754 => {%2755..%2767},
        %2768 => {%2769..%2787},
        by_val %2788 => {%2789..%2839},
        %2840 => {%2841..%2991}) node_offset:559:5 to :559:11
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2737 = block({%2738..%3002}) node_offset:558:22 to :558:23
  in /home/ian/src/zig/lib/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2458 = builtin_call(%2456, %2457, @InternPool.Index.empty_struct) node_offset:508:12 to :508:48
  in /home/ian/src/zig/lib/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2303 = block({%2304..%2466}) node_offset:486:41 to :486:42
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMainWithArgs
    > %2078 = call(.auto, %2076, []) node_offset:458:12 to :458:38
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMainWithArgs
    > %2041 = block({%2042..%2085}) node_offset:451:72 to :451:73
  in /home/ian/src/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1864 = builtin_call(%1861, %1862, %1863) node_offset:414:17 to :414:79
  in /home/ian/src/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1860 = field_call(nodiscard .auto, %1857, "exit", [
        {%1861..%1865},
      ]) node_offset:414:5 to :414:80
  in /home/ian/src/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1466 = block({%1467..%1868}) node_offset:354:49 to :354:50

/home/ian/src/zig/lib/std/debug.zig:373:22: 0x6a203cc in panicExtra__anon_198821 (zig)
    std.builtin.panic(msg, trace, ret_addr);
                     ^
/home/ian/src/zig/lib/std/debug.zig:348:15: 0x6602ea6 in panic__anon_167313 (zig)
    panicExtra(null, null, format, args);
              ^
/home/ian/src/zig/src/InternPool.zig:5800:24: 0x608e555 in getCoerced (zig)
        std.debug.panic("InternPool.getCoerced of {s} not implemented from {s} to {s}", .{
                       ^
/home/ian/src/zig/src/Module.zig:6489:43: 0x5d0dd2d in getCoerced (zig)
    return (try mod.intern_pool.getCoerced(mod.gpa, val.toIntern(), new_ty.toIntern())).toValue();
                                          ^
/home/ian/src/zig/src/Sema.zig:27824:54: 0x60bc708 in coerceInMemory (zig)
    return Air.internedToRef((try sema.mod.getCoerced(val, dst_ty)).toIntern());
                                                     ^
/home/ian/src/zig/src/Sema.zig:27158:39: 0x5d1897d in coerceExtra (zig)
            return sema.coerceInMemory(val, dest_ty);
                                      ^
/home/ian/src/zig/src/Sema.zig:6981:44: 0x69ab114 in analyzeArg (zig)
            else => return sema.coerceExtra(
                                           ^
/home/ian/src/zig/src/Sema.zig:7529:49: 0x6550fff in analyzeCall (zig)
            arg_out.* = try args_info.analyzeArg(sema, block, arg_idx, param_ty, func_ty_info, func);
                                                ^
/home/ian/src/zig/src/Sema.zig:6674:43: 0x5fb7722 in zirCall__anon_141945 (zig)
    const call_inst = try sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, args_info, call_dbg_node, .call);
                                          ^
/home/ian/src/zig/src/Sema.zig:1007:62: 0x5cf8731 in analyzeBodyInner (zig)
            .field_call                   => try sema.zirCall(block, inst, .field),
                                                             ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:865:30: 0x65f529b in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:18198:37: 0x607e05b in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/ian/src/zig/src/Sema.zig:1654:61: 0x5d07137 in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:5625:25: 0x607b94e in zirLoop (zig)
    try sema.analyzeBody(&loop_block, body);
                        ^
/home/ian/src/zig/src/Sema.zig:1534:68: 0x5d060f9 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirLoop(block, inst);
                                                                   ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Module.zig:5403:21: 0x5cd8a2a in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/ian/src/zig/src/Module.zig:3962:40: 0x5aae936 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/ian/src/zig/src/Sema.zig:30763:31: 0x661a6dc in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/ian/src/zig/src/Sema.zig:34601:40: 0x60b1ce9 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/ian/src/zig/src/Sema.zig:31119:69: 0x6080603 in analyzeIsNonErrComptimeOnly (zig)
                const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                    ^
/home/ian/src/zig/src/Sema.zig:18250:60: 0x607f279 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/ian/src/zig/src/Sema.zig:1700:67: 0x5d083f5 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/ian/src/zig/src/Sema.zig:18185:37: 0x607e2c9 in zirCondbr (zig)
        return sema.analyzeBodyInner(parent_block, body);
                                    ^
/home/ian/src/zig/src/Sema.zig:1654:61: 0x5d07137 in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Module.zig:5403:21: 0x5cd8a2a in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/ian/src/zig/src/Module.zig:3962:40: 0x5aae936 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/ian/src/zig/src/Sema.zig:30763:31: 0x661a6dc in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/ian/src/zig/src/Sema.zig:34601:40: 0x60b1ce9 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/ian/src/zig/src/Sema.zig:31119:69: 0x6080603 in analyzeIsNonErrComptimeOnly (zig)
                const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                    ^
/home/ian/src/zig/src/Sema.zig:31148:56: 0x656583c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/ian/src/zig/src/Sema.zig:18134:32: 0x5fc7922 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/ian/src/zig/src/Sema.zig:1051:66: 0x5cfaa18 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:10411:45: 0x6585dec in resolveProngComptime (zig)
                return sema.resolveBlockBody(spa.parent_block, src, child_block, prong_body, spa.switch_block_inst, merges);
                                            ^
/home/ian/src/zig/src/Sema.zig:11644:52: 0x5fd90af in zirSwitchBlock (zig)
                    return spa.resolveProngComptime(
                                                   ^
/home/ian/src/zig/src/Sema.zig:1074:69: 0x5cfbc29 in analyzeBodyInner (zig)
            .switch_block                 => try sema.zirSwitchBlock(block, inst, false),
                                                                    ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:7456:33: 0x654fb43 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/ian/src/zig/src/Sema.zig:23304:28: 0x601211b in zirBuiltinCall (zig)
    return sema.analyzeCall(
                           ^
/home/ian/src/zig/src/Sema.zig:1123:69: 0x5cfe2a1 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:7456:33: 0x654fb43 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/ian/src/zig/src/Sema.zig:6674:43: 0x5fb6501 in zirCall__anon_141944 (zig)
    const call_inst = try sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, args_info, call_dbg_node, .call);
                                          ^
/home/ian/src/zig/src/Sema.zig:1006:62: 0x5cf8669 in analyzeBodyInner (zig)
            .call                         => try sema.zirCall(block, inst, .direct),
                                                             ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:7456:33: 0x654fb43 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/ian/src/zig/src/Sema.zig:23304:28: 0x601211b in zirBuiltinCall (zig)
    return sema.analyzeCall(
                           ^
/home/ian/src/zig/src/Sema.zig:1123:69: 0x5cfe2a1 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/ian/src/zig/src/Sema.zig:902:45: 0x5ae79c5 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/ian/src/zig/src/Sema.zig:851:50: 0x6546763 in resolveBody (zig)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/home/ian/src/zig/src/Sema.zig:6963:59: 0x69aab41 in analyzeArg (zig)
                const uncoerced_arg = try sema.resolveBody(block, arg_body, zir_call.call_inst);
                                                          ^
/home/ian/src/zig/src/Sema.zig:7529:49: 0x6550fff in analyzeCall (zig)
            arg_out.* = try args_info.analyzeArg(sema, block, arg_idx, param_ty, func_ty_info, func);
                                                ^
/home/ian/src/zig/src/Sema.zig:6674:43: 0x5fb7722 in zirCall__anon_141945 (zig)
    const call_inst = try sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, args_info, call_dbg_node, .call);
                                          ^
/home/ian/src/zig/src/Sema.zig:1007:62: 0x5cf8731 in analyzeBodyInner (zig)
            .field_call                   => try sema.zirCall(block, inst, .field),
                                                             ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Module.zig:5403:21: 0x5cd8a2a in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/ian/src/zig/src/Module.zig:3962:40: 0x5aae936 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/ian/src/zig/src/Compilation.zig:3197:42: 0x5aac9f0 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/ian/src/zig/src/Compilation.zig:3134:30: 0x592b3fd in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/ian/src/zig/src/Compilation.zig:2058:31: 0x5926f11 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/ian/src/zig/src/main.zig:4030:24: 0x5955ca0 in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/ian/src/zig/src/main.zig:3451:17: 0x5977909 in buildOutputType (zig)
    updateModule(comp) catch |err| switch (err) {
                ^
/home/ian/src/zig/src/main.zig:276:31: 0x57e2f17 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .zig_test);
                              ^
/home/ian/src/zig/src/main.zig:214:20: 0x57e0015 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/ian/src/zig/lib/std/start.zig:477:37: 0x57dfa1e in main (zig)
    std.os.argv = @as([*][*:0]u8, @ptrCast(c_argv))[0..@as(usize, @intCast(c_argc))];
                                    ^
???:?:?: 0x7f8969a27ccf in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7f8969a27ccf` was not available, trace may be incomplete

Aborted (core dumped)
zig test command
thread 10136 panic: InternPool.getCoerced of simple_value not implemented from anon_struct_type to struct_type
Analyzing examples/fib_build.zig: fib_build.zig:benchmarks
      %33 = decl_ref("zubench") 
      %34 = dbg_stmt(2, 29)
      %35 = field_call(.compile_time, %33, "Spec", [
        {
          %36 = decl_val("fib") 
          %37 = field_val(%36, "fib") 
          %38 = break_inline(%35, %37)
        },
      ]) 
      %39 = validate_struct_init_ty(%35) 
      %40 = field_type(%35, args) 
      %41 = opt_eu_base_ty(%40) 
      %42 = elem_type_index(%41, 0)
      %43 = int(35)
      %44 = array_init(%41{%43}) 
      %45 = as_node(%40, %44) 
      %46 = field_type(%35, max_samples) 
      %47 = int(20)
      %48 = as_node(%46, %47) 
      %49 = field_type(%35, opts) 
      %50 = opt_eu_base_ty(%49) 
      %51 = validate_struct_init_ty(%50) 
      %52 = field_type(%50, outlier_detection) 
      %53 = enum_literal("none") 
      %54 = as_node(%52, %53) 
      %55 = struct_init([%52, %54]) 
      %56 = as_node(%49, %55) 
      %57 = struct_init([%40, %45], [%46, %48], [%49, %56]) 
      %58 = decl_ref("zubench") 
      %59 = dbg_stmt(8, 33)
      %60 = field_call(.compile_time, %58, "Spec", [
        {
          %61 = decl_val("fib") 
          %62 = field_val(%61, "fibFast") 
          %63 = break_inline(%60, %62)
        },
      ]) 
      %64 = validate_struct_init_ty(%60) 
      %65 = field_type(%60, args) 
      %66 = opt_eu_base_ty(%65) 
      %67 = elem_type_index(%66, 0)
      %68 = int(35)
      %69 = array_init(%66{%68}) 
      %70 = as_node(%65, %69) 
      %71 = field_type(%60, max_samples) 
      %72 = int(1000000)
      %73 = as_node(%71, %72) 
      %74 = struct_init([%65, %70], [%71, %73]) 
      %75 = decl_ref("zubench") 
      %76 = dbg_stmt(10, 31)
      %77 = field_call(.compile_time, %75, "Spec", [
        {
          %78 = decl_val("fib10") 
          %79 = break_inline(%77, %78)
        },
      ]) 
      %80 = validate_struct_init_ty(%77) 
    > %81 = field_type(%77, max_samples) 
      %82 = int(1000)
      %83 = as_node(%81, %82) 
      %84 = struct_init([%81, %83]) 
      %85 = struct_init_anon([fib()=%57], [fibFast()=%74], [fib10()=%84]) 
      %86 = break_inline(%32, %85)
    For full context, use the command
      zig ast-check -t examples/fib_build.zig

  in src/bench_runner.zig: bench_runner.zig:standalone
    > %471 = field_val(%469, "benchmarks") 
  in src/bench_runner.zig: bench_runner.zig:standalone
    > %468 = typeof_builtin({%469..%472}) 
  in src/bench_runner.zig: bench_runner.zig:standalone
    > %467 = block_comptime({%468, %473}) 
  in src/bench_runner.zig: bench_runner.zig:standalone
    > %394 = block({%395..%670}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %61 = try(%60, {%62..%64}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %44 = condbr(%43, {%46..%66}, {%56..%67}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %45 = block({%40..%44}) 
  in src/bench_runner.zig: bench_runner.zig:main
    > %37 = block({%38..%71}) 
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2849 = is_non_err(%2848) node_offset:574:28 to :574:45
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2851 = block({%2845..%2850}) node_offset:574:28 to :574:45
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2842 = block({%2843..%2989}) node_offset:573:24 to :573:25
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2753 = switch_block(%2751,
        else => {%2992..%2998},
        %2754 => {%2755..%2767},
        %2768 => {%2769..%2787},
        by_val %2788 => {%2789..%2839},
        %2840 => {%2841..%2991}) node_offset:559:5 to :559:11
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMain
    > %2737 = block({%2738..%3002}) node_offset:558:22 to :558:23
  in /home/ian/src/zig/lib/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2458 = builtin_call(%2456, %2457, @InternPool.Index.empty_struct) node_offset:508:12 to :508:48
  in /home/ian/src/zig/lib/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2303 = block({%2304..%2466}) node_offset:486:41 to :486:42
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMainWithArgs
    > %2078 = call(.auto, %2076, []) node_offset:458:12 to :458:38
  in /home/ian/src/zig/lib/std/start.zig: start.zig:callMainWithArgs
    > %2041 = block({%2042..%2085}) node_offset:451:72 to :451:73
  in /home/ian/src/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1864 = builtin_call(%1861, %1862, %1863) node_offset:414:17 to :414:79
  in /home/ian/src/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1860 = field_call(nodiscard .auto, %1857, "exit", [
        {%1861..%1865},
      ]) node_offset:414:5 to :414:80
  in /home/ian/src/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1466 = block({%1467..%1868}) node_offset:354:49 to :354:50

/home/ian/src/zig/lib/std/debug.zig:373:22: 0x6a203cc in panicExtra__anon_198821 (zig)
    std.builtin.panic(msg, trace, ret_addr);
                     ^
/home/ian/src/zig/lib/std/debug.zig:348:15: 0x6602ea6 in panic__anon_167313 (zig)
    panicExtra(null, null, format, args);
              ^
/home/ian/src/zig/src/InternPool.zig:5800:24: 0x608e555 in getCoerced (zig)
        std.debug.panic("InternPool.getCoerced of {s} not implemented from {s} to {s}", .{
                       ^
/home/ian/src/zig/src/Module.zig:6489:43: 0x5d0dd2d in getCoerced (zig)
    return (try mod.intern_pool.getCoerced(mod.gpa, val.toIntern(), new_ty.toIntern())).toValue();
                                          ^
/home/ian/src/zig/src/Sema.zig:27824:54: 0x60bc708 in coerceInMemory (zig)
    return Air.internedToRef((try sema.mod.getCoerced(val, dst_ty)).toIntern());
                                                     ^
/home/ian/src/zig/src/Sema.zig:27158:39: 0x5d1897d in coerceExtra (zig)
            return sema.coerceInMemory(val, dest_ty);
                                      ^
/home/ian/src/zig/src/Sema.zig:27093:28: 0x5ae0154 in coerce (zig)
    return sema.coerceExtra(block, dest_ty_unresolved, inst, inst_src, .{}) catch |err| switch (err) {
                           ^
/home/ian/src/zig/src/Sema.zig:35013:44: 0x6092f02 in semaStructFields (zig)
                const coerced = sema.coerce(&block_scope, field.ty, init, .unneeded) catch |err| switch (err) {
                                           ^
/home/ian/src/zig/src/Sema.zig:34518:25: 0x5d0ea3c in resolveTypeFieldsStruct (zig)
    try semaStructFields(sema.mod, struct_obj);
                        ^
/home/ian/src/zig/src/Sema.zig:34444:53: 0x5d0f754 in resolveTypeFields (zig)
                    try sema.resolveTypeFieldsStruct(ty, struct_obj);
                                                    ^
/home/ian/src/zig/src/Sema.zig:19701:35: 0x6594585 in fieldType (zig)
        try sema.resolveTypeFields(cur_ty);
                                  ^
/home/ian/src/zig/src/Sema.zig:19687:26: 0x5ffe512 in zirFieldType (zig)
    return sema.fieldType(block, aggregate_ty, field_name, field_name_src, ty_src);
                         ^
/home/ian/src/zig/src/Sema.zig:1093:67: 0x5cfcb31 in analyzeBodyInner (zig)
            .field_type                   => try sema.zirFieldType(block, inst),
                                                                  ^
/home/ian/src/zig/src/Sema.zig:902:45: 0x5ae79c5 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/ian/src/zig/src/Module.zig:4387:50: 0x5ae49c3 in semaDecl (zig)
    const result_ref = (try sema.analyzeBodyBreak(&block_scope, body)).?.operand;
                                                 ^
/home/ian/src/zig/src/Module.zig:3868:32: 0x58e97e7 in ensureDeclAnalyzed (zig)
        break :blk mod.semaDecl(decl_index) catch |err| switch (err) {
                               ^
/home/ian/src/zig/src/Sema.zig:30750:27: 0x65896f3 in ensureDeclAnalyzed (zig)
    mod.ensureDeclAnalyzed(decl_index) catch |err| {
                          ^
/home/ian/src/zig/src/Sema.zig:30814:32: 0x6610eb0 in analyzeDeclRefInner (zig)
    try sema.ensureDeclAnalyzed(decl_index);
                               ^
/home/ian/src/zig/src/Sema.zig:30710:50: 0x655b5bb in analyzeDeclVal (zig)
    const decl_ref = try sema.analyzeDeclRefInner(decl_index, false);
                                                 ^
/home/ian/src/zig/src/Sema.zig:26093:35: 0x69c128e in namespaceLookupVal (zig)
    return try sema.analyzeDeclVal(block, src, decl);
                                  ^
/home/ian/src/zig/src/Sema.zig:25568:56: 0x6560a7c in fieldVal (zig)
                        if (try sema.namespaceLookupVal(block, src, namespace, field_name)) |inst| {
                                                       ^
/home/ian/src/zig/src/Sema.zig:9809:25: 0x5fc2ae9 in zirFieldVal (zig)
    return sema.fieldVal(block, src, object, field_name, field_name_src);
                        ^
/home/ian/src/zig/src/Sema.zig:1039:66: 0x5cfa0b7 in analyzeBodyInner (zig)
            .field_val                    => try sema.zirFieldVal(block, inst),
                                                                 ^
/home/ian/src/zig/src/Sema.zig:902:45: 0x5ae79c5 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/ian/src/zig/src/Sema.zig:851:50: 0x6546763 in resolveBody (zig)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/home/ian/src/zig/src/Sema.zig:17842:41: 0x5ff7936 in zirTypeofBuiltin (zig)
    const operand = try sema.resolveBody(&child_block, body, inst);
                                        ^
/home/ian/src/zig/src/Sema.zig:1080:71: 0x5cfc0df in analyzeBodyInner (zig)
            .typeof_builtin               => try sema.zirTypeofBuiltin(block, inst),
                                                                      ^
/home/ian/src/zig/src/Sema.zig:902:45: 0x5ae79c5 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/ian/src/zig/src/Sema.zig:851:50: 0x6546763 in resolveBody (zig)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/home/ian/src/zig/src/Sema.zig:5842:32: 0x65f6c78 in resolveBlockBody (zig)
        return sema.resolveBody(child_block, body, body_inst);
                               ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Module.zig:5403:21: 0x5cd8a2a in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/ian/src/zig/src/Module.zig:3962:40: 0x5aae936 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/ian/src/zig/src/Sema.zig:30763:31: 0x661a6dc in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/ian/src/zig/src/Sema.zig:34601:40: 0x60b1ce9 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/ian/src/zig/src/Sema.zig:31119:69: 0x6080603 in analyzeIsNonErrComptimeOnly (zig)
                const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                    ^
/home/ian/src/zig/src/Sema.zig:18250:60: 0x607f279 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/ian/src/zig/src/Sema.zig:1700:67: 0x5d083f5 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/ian/src/zig/src/Sema.zig:18185:37: 0x607e2c9 in zirCondbr (zig)
        return sema.analyzeBodyInner(parent_block, body);
                                    ^
/home/ian/src/zig/src/Sema.zig:1654:61: 0x5d07137 in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Module.zig:5403:21: 0x5cd8a2a in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/ian/src/zig/src/Module.zig:3962:40: 0x5aae936 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/ian/src/zig/src/Sema.zig:30763:31: 0x661a6dc in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/ian/src/zig/src/Sema.zig:34601:40: 0x60b1ce9 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/ian/src/zig/src/Sema.zig:31119:69: 0x6080603 in analyzeIsNonErrComptimeOnly (zig)
                const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                    ^
/home/ian/src/zig/src/Sema.zig:31148:56: 0x656583c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/ian/src/zig/src/Sema.zig:18134:32: 0x5fc7922 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/ian/src/zig/src/Sema.zig:1051:66: 0x5cfaa18 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:10411:45: 0x6585dec in resolveProngComptime (zig)
                return sema.resolveBlockBody(spa.parent_block, src, child_block, prong_body, spa.switch_block_inst, merges);
                                            ^
/home/ian/src/zig/src/Sema.zig:11644:52: 0x5fd90af in zirSwitchBlock (zig)
                    return spa.resolveProngComptime(
                                                   ^
/home/ian/src/zig/src/Sema.zig:1074:69: 0x5cfbc29 in analyzeBodyInner (zig)
            .switch_block                 => try sema.zirSwitchBlock(block, inst, false),
                                                                    ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:7456:33: 0x654fb43 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/ian/src/zig/src/Sema.zig:23304:28: 0x601211b in zirBuiltinCall (zig)
    return sema.analyzeCall(
                           ^
/home/ian/src/zig/src/Sema.zig:1123:69: 0x5cfe2a1 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:7456:33: 0x654fb43 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/ian/src/zig/src/Sema.zig:6674:43: 0x5fb6501 in zirCall__anon_141944 (zig)
    const call_inst = try sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, args_info, call_dbg_node, .call);
                                          ^
/home/ian/src/zig/src/Sema.zig:1006:62: 0x5cf8669 in analyzeBodyInner (zig)
            .call                         => try sema.zirCall(block, inst, .direct),
                                                             ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Sema.zig:7456:33: 0x654fb43 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/ian/src/zig/src/Sema.zig:23304:28: 0x601211b in zirBuiltinCall (zig)
    return sema.analyzeCall(
                           ^
/home/ian/src/zig/src/Sema.zig:1123:69: 0x5cfe2a1 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/ian/src/zig/src/Sema.zig:902:45: 0x5ae79c5 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/ian/src/zig/src/Sema.zig:851:50: 0x6546763 in resolveBody (zig)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/home/ian/src/zig/src/Sema.zig:6963:59: 0x69aab41 in analyzeArg (zig)
                const uncoerced_arg = try sema.resolveBody(block, arg_body, zir_call.call_inst);
                                                          ^
/home/ian/src/zig/src/Sema.zig:7529:49: 0x6550fff in analyzeCall (zig)
            arg_out.* = try args_info.analyzeArg(sema, block, arg_idx, param_ty, func_ty_info, func);
                                                ^
/home/ian/src/zig/src/Sema.zig:6674:43: 0x5fb7722 in zirCall__anon_141945 (zig)
    const call_inst = try sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, args_info, call_dbg_node, .call);
                                          ^
/home/ian/src/zig/src/Sema.zig:1007:62: 0x5cf8731 in analyzeBodyInner (zig)
            .field_call                   => try sema.zirCall(block, inst, .field),
                                                             ^
/home/ian/src/zig/src/Sema.zig:5844:34: 0x65f6cbb in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/ian/src/zig/src/Sema.zig:5827:33: 0x6083d8d in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/ian/src/zig/src/Sema.zig:1549:49: 0x5d0a273 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/ian/src/zig/src/Sema.zig:885:30: 0x5f50ae8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/ian/src/zig/src/Module.zig:5403:21: 0x5cd8a2a in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/ian/src/zig/src/Module.zig:3962:40: 0x5aae936 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/ian/src/zig/src/Compilation.zig:3197:42: 0x5aac9f0 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/ian/src/zig/src/Compilation.zig:3134:30: 0x592b3fd in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/ian/src/zig/src/Compilation.zig:2058:31: 0x5926f11 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/ian/src/zig/src/main.zig:4030:24: 0x5955ca0 in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/ian/src/zig/src/main.zig:3451:17: 0x5977909 in buildOutputType (zig)
    updateModule(comp) catch |err| switch (err) {
                ^
/home/ian/src/zig/src/main.zig:270:31: 0x57e2c8f in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Exe });
                              ^
/home/ian/src/zig/src/main.zig:214:20: 0x57e0015 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/ian/src/zig/lib/std/start.zig:477:37: 0x57dfa1e in main (zig)
    std.os.argv = @as([*][*:0]u8, @ptrCast(c_argv))[0..@as(usize, @intCast(c_argc))];
                                    ^
???:?:?: 0x7fc358a27ccf in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7fc358a27ccf` was not available, trace may be incomplete

Aborted (core dumped)
zig build-exe command

From what I can tell from the ZIR referenced in these outputs, both may be related to the issue reported in #16412, namely attempting to coerce .{} to an empty tuple type:

@dweiller
Copy link
Contributor Author

dweiller commented Aug 19, 2023

Bisecting seems to point to PR #15726 merged in commit 496320d. More specifically, that commit cannot run the zig test command above and commit 666ae24 (the commit before the PR was merged) can. The individual commits (other than the PR's final one) don't build by themselves so I couldn't narrow it down further. This seems to agree with @ianprime0509's assessment that it is do to with tuple coercion as the PR was reworking peer type resolution and tuple coercion. In fact replacing the empty anonymous tuple on line 42 of src/bench_runner.zig like this;

             allocator,
             bench_name,
             test_fn.func,
-            .{},
+            std.meta.ArgsTuple(fn () void){},
             options,
             max_samples,
             &progress,

makes the zig test compile successfully.

@ianprime0509
Copy link
Contributor

FYI, this is working for me as of 0.12.0-dev.722+412d863ba (see also #17380 which adds a behavior test for this case).

@Vexu Vexu closed this as completed Oct 3, 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
Projects
None yet
Development

No branches or pull requests

3 participants