You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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:
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;
Activity
ianprime0509 commentedon Aug 19, 2023
Here's the output I get with a debug build of Zig
0.12.0-dev.125+7ef1eb1c2:Details
zig test command
Details
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:args, an empty tuple type, is.{})dweiller commentedon Aug 19, 2023
Bisecting seems to point to PR #15726 merged in commit 496320d. More specifically, that commit cannot run the
zig testcommand 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 ofsrc/bench_runner.ziglike this;allocator, bench_name, test_fn.func, - .{}, + std.meta.ArgsTuple(fn () void){}, options, max_samples, &progress,makes the
zig testcompile successfully.ianprime0509 commentedon Oct 3, 2023
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).