Skip to content

compiler segfault #16874

Closed
Closed

Description

@dweiller

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.

Activity

  1. added
    bugObserved behavior contradicts documented or intended behavior
    on Aug 18, 2023
  2. ianprime0509 commented on Aug 19, 2023

    @ianprime0509
    Contributor

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

    Details
    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
    Details
    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:

  3. dweiller commented on Aug 19, 2023

    @dweiller
    ContributorAuthor

    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.

  4. ianprime0509 commented on Oct 3, 2023

    @ianprime0509
    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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behavior

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions