zig
zig copied to clipboard
Compiler segfaults when building code accessing ComptimeStringMap
Zig Version
zig-0.11.0-dev.1971+5a12d0070
Steps to Reproduce and Observed Behavior
Zig compiler crashes in zig build
on https://github.com/ringtailsoftware/zig-embeddir/tree/crashbug
Possibly it's to do with using this map before it's created? https://github.com/ringtailsoftware/zig-embeddir/blob/crashbug/src/main.zig#L29
uname -a
Linux 2e4484a2d4e3 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
zig build
thread 2007 panic: reached unreachable code
Analyzing /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
%3085 = decl_ref("root")
%3086 = dbg_stmt(17, 32)
%3087 = field_call_bind(%3085, "main")
%3088 = dbg_stmt(17, 37)
%3089 = call(.auto, %3087, [])
> %3090 = is_non_err(%3089)
%3091 = condbr(%3090, {
%3093 = err_union_payload_unsafe(%3089)
%3151 = break(%3092, %3093)
}, {
%3094 = save_err_ret_index(@Zir.Inst.Ref.none)
%3095 = err_union_code(%3089)
%3096 = block({
%3097 = dbg_block_begin()
%3098 = dbg_stmt(18, 17)
%3099 = decl_ref("std")
%3100 = dbg_stmt(18, 20)
%3101 = field_ptr(%3099, "log")
%3102 = dbg_stmt(18, 24)
%3103 = field_call_bind(%3101, "err")
%3104 = dbg_stmt(18, 28)
%3105 = call(nodiscard .auto, %3103, [
{
%3106 = str("{s}")
%3107 = break_inline(%3105, %3106)
},
{
%3108 = dbg_stmt(18, 38)
%3109 = as_node(@Zir.Inst.Ref.anyerror_type, %3095)
%3110 = error_name(%3109)
%3111 = array_init_anon({%3110})
%3112 = break_inline(%3105, %3111)
},
])
%3113 = dbg_stmt(19, 21)
%3117 = block({
%3114 = extended(error_return_trace())
%3115 = is_non_null(%3114)
%3116 = condbr(%3115, {
%3118 = dbg_block_begin()
%3119 = optional_payload_unsafe(%3114)
%3120 = dbg_var_val(%3119, "trace")
%3121 = block({
%3122 = dbg_block_begin()
%3123 = dbg_stmt(20, 21)
%3124 = decl_ref("std")
%3125 = dbg_stmt(20, 24)
%3126 = field_ptr(%3124, "debug")
%3127 = dbg_stmt(20, 30)
%3128 = field_call_bind(%3126, "dumpStackTrace")
%3129 = dbg_stmt(20, 45)
%3130 = call(nodiscard .auto, %3128, [
{
%3131 = validate_deref(%3119)
%3132 = load(%3119)
%3133 = break_inline(%3130, %3132)
},
])
%3134 = dbg_block_end()
%3135 = restore_err_ret_index(%3121, @Zir.Inst.Ref.none)
%3136 = break(%3121, @Zir.Inst.Ref.void_value)
})
%3137 = dbg_block_end()
%3138 = break(%3117, @Zir.Inst.Ref.void_value)
}, {
%3139 = break(%3117, @Zir.Inst.Ref.void_value)
})
})
%3140 = ensure_result_used(%3117)
%3141 = dbg_stmt(22, 17)
%3142 = ret_type()
%3143 = as_node(%3142, @Zir.Inst.Ref.one)
%3144 = restore_err_ret_index(@Zir.Inst.Ref.none, @Zir.Inst.Ref.none)
%3145 = dbg_stmt(22, 17)
%3146 = ret_node(%3143)
%3147 = dbg_block_end()
%3148 = restore_err_ret_index(%3096, @Zir.Inst.Ref.none)
%3149 = break(%3096, @Zir.Inst.Ref.void_value)
})
%3150 = restore_err_ret_index(%3092, @Zir.Inst.Ref.none)
%3152 = break(%3092, @Zir.Inst.Ref.void_value)
})
For full context, use the command
zig ast-check -t /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
> %3092 = block({%3085..%3091})
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
> %3082 = block({%3083..%3229})
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
> %2986 = switch_block(%2983,
else => {%3232..%3236},
%2988 => {%2989..%3002},
%3004 => {%3005..%3024},
%3027 => {%3025..%3078},
%3080 => {%3081..%3231})
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
> %2970 = block({%2971..%3240})
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:initEventLoopAndCallMain
> %2686 = builtin_call(%2684, %2685, @Zir.Inst.Ref.empty_struct)
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:initEventLoopAndCallMain
> %2530 = block({%2531..%2694})
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMainWithArgs
> %2319 = call(.auto, %2317, [])
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMainWithArgs
> %2280 = block({%2281..%2327})
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:posixCallMainAndExit
> %2145 = builtin_call(%2142, %2143, %2144)
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:posixCallMainAndExit
> %2141 = call(nodiscard .auto, %2139, [
{%2142..%2146},
])
in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:posixCallMainAndExit
> %1756 = block({%1757..%2149})
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/type.zig:3962:21: 0xbaa53f in slicePtrFieldType (zig)
else => unreachable,
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:3363:58: 0xd8dfeb in lowerValue (zig)
.ty = tv.ty.slicePtrFieldType(&buf),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:3524:81: 0xd9079b in lowerValue (zig)
return dg.lowerValue(.{ .ty = payload_ty, .val = payload.data });
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4464:48: 0x175b2bf in resolveValue (zig)
const llvm_val = try self.dg.lowerValue(tv);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4457:40: 0x175b71f in resolveInst (zig)
.val = self.air.value(inst).?,
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4763:54: 0x178ea43 in airCall (zig)
const llvm_arg = try self.resolveInst(arg);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4615:55: 0x125f547 in genBody (zig)
.call => try self.airCall(inst, .Auto),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:1200:35: 0x125a34b in updateFunc (zig)
fg.genBody(air.getMainBody()) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/link/Elf.zig:2464:74: 0x1262853 in updateFunc (zig)
if (self.llvm_object) |llvm_object| return llvm_object.updateFunc(module, func, air, liveness);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/link.zig:544:77: 0xf63f43 in updateFunc (zig)
.elf => return @fieldParentPtr(Elf, "base", base).updateFunc(module, func, air, liveness),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Module.zig:4341:37: 0xd3cac7 in ensureFuncBodyAnalyzed (zig)
comp.bin_file.updateFunc(mod, func, air, liveness) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:28244:36: 0x18aabcb in ensureFuncBodyAnalyzed (zig)
sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:30871:44: 0x138f853 in resolveInferredErrorSet (zig)
try sema.ensureFuncBodyAnalyzed(ies.func);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:28536:49: 0x13521d3 in analyzeIsNonErrComptimeOnly (zig)
try sema.resolveInferredErrorSet(block, src, ies);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:28563:56: 0x180469b in analyzeIsNonErr (zig)
const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:16739:32: 0x12acc83 in zirIsNonErr (zig)
return sema.analyzeIsNonErr(block, src, operand);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:956:66: 0xf81d37 in analyzeBodyInner (zig)
.is_non_err => try sema.zirIsNonErr(block, inst),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:10770:49: 0x12bbb87 in zirSwitchBlock (zig)
return sema.resolveBlockBody(block, src, &child_block, body, inst, merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:978:69: 0xf8314b in analyzeBodyInner (zig)
.switch_block => try sema.zirSwitchBlock(block, inst),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
_ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6802:55: 0x17ee3a7 in analyzeCall (zig)
sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:21487:28: 0x12f641b in zirBuiltinCall (zig)
return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1034:69: 0xf86497 in analyzeBodyInner (zig)
.builtin_call => try sema.zirBuiltinCall(block, inst),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
_ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6802:55: 0x17ee3a7 in analyzeCall (zig)
sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6319:32: 0x129e327 in zirCall (zig)
return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:913:62: 0xf7f58f in analyzeBodyInner (zig)
.call => try sema.zirCall(block, inst),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
_ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6802:55: 0x17ee3a7 in analyzeCall (zig)
sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:21487:28: 0x12f641b in zirBuiltinCall (zig)
return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1034:69: 0xf86497 in analyzeBodyInner (zig)
.builtin_call => try sema.zirBuiltinCall(block, inst),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:812:45: 0xd5d087 in analyzeBodyBreak (zig)
const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:762:50: 0x17e44a7 in resolveBody (zig)
const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6269:63: 0x129deeb in zirCall (zig)
const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:913:62: 0xf7f58f in analyzeBodyInner (zig)
.call => try sema.zirCall(block, inst),
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
if (sema.analyzeBodyInner(child_block, body)) |_| {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
_ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Module.zig:5602:43: 0xf61797 in analyzeFnBody (zig)
sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Module.zig:4300:40: 0xd3c577 in ensureFuncBodyAnalyzed (zig)
var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Compilation.zig:3296:42: 0xd3a8a3 in processOneJob (zig)
module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Compilation.zig:3234:30: 0xbe8c2f in performAllTheWork (zig)
try processOneJob(comp, work_item);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Compilation.zig:2425:31: 0xbe4ac7 in update (zig)
try comp.performAllTheWork(main_progress_node);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:3641:20: 0xc0b853 in updateModule (zig)
try comp.update();
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:3278:17: 0xafc9d7 in buildOutputType (zig)
updateModule(gpa, comp, hook) catch |err| switch (err) {
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:263:31: 0xad082b in mainArgs (zig)
return buildOutputType(gpa, arena, args, .{ .build = .Exe });
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:207:20: 0xacffcb in main (zig)
return mainArgs(gpa, arena, args);
^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/lib/std/start.zig:617:37: 0xad24fb in main (zig)
const result = root.main() catch |err| {
^
???:?:?: 0xffffadc073fb in ??? (???)
???:?:?: 0xffffadc074cb in ??? (???)
???:?:?: 0xace5ef in ??? (/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/zig_llvm.cpp)
error: embdir...
error: The following command terminated unexpectedly:
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/bin/zig build-exe /zig/zig-embeddir/src/main.zig -cflags -Wall -- /zig/zig-embeddir/src/pocketmod.c --cache-dir /zig/zig-embeddir/zig-cache --global-cache-dir /home/pulseaudio/.cache/zig --name embdir --mod assets::/zig/zig-embeddir/zig-cache/options/L6tYGsVMZq2VP02EtjG_iuhaNJCOWwTEG1k-msXKrAXnnNIN9CH2J_MGChV35kRT --deps assets -I /zig/zig-embeddir/src --enable-cache
error: the following build command failed with exit code 6:
/zig/zig-embeddir/zig-cache/o/bbec3e8b8b5574af1013f795199a9b47/build /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/bin/zig /zig/zig-embeddir /zig/zig-embeddir/zig-cache /home/pulseaudio/.cache/zig
root@2e4484a2d4e3:/zig/zig-embeddir#
Expected Behavior
exit(0)