$ release-zig build-obj -fllvm repro.zig
error: Invalid phi record (Producer: 'zig 0.14.0' Reader: 'LLVM 19.1.7+libcxx')
$ release-zig build-obj -fno-llvm -target x86_64-linux repro.zig
Segmentation fault (core dumped)
$ release-zig build-exe -fno-llvm -target wasm32-wasi -fno-entry repro.zig && wasm-validate repro.wasm
repro.wasm:0000060: error: type mismatch in i32.ne, expected [i32, i32] but got [v128, v128]
$ debug-zig build-obj -fllvm repro.zig
thread 350785 panic: reached unreachable code
lib/std/debug.zig:518:14: 0x186375d in assert (zig)
if (!ok) unreachable; // assertion failure
^
src/codegen/llvm/Builder.zig:5951:36: 0x2ed6851 in finish (zig)
for (vals) |val| assert(val.typeOfWip(wip) == extra.data.type);
^
src/codegen/llvm.zig:6062:27: 0x2eb1783 in cmp (zig)
phi.finish(
^
src/codegen/llvm.zig:5949:24: 0x2eaffef in airCmp (zig)
return self.cmp(fast, op, operand_ty, lhs, rhs);
^
src/codegen/llvm.zig:5125:44: 0x2a43f22 in genBody (zig)
.cmp_eq => try self.airCmp(inst, .eq, .normal),
^
src/codegen/llvm.zig:1758:19: 0x2a40360 in updateFunc (zig)
fg.genBody(air.getMainBody(), .poi) catch |err| switch (err) {
^
src/link/Elf.zig:2369:70: 0x2e8a4e5 in updateFunc (zig)
if (self.llvm_object) |llvm_object| return llvm_object.updateFunc(pt, func_index, air, liveness);
^
src/link.zig:736:82: 0x2a4bcbd in updateFunc (zig)
return @as(*tag.Type(), @fieldParentPtr("base", base)).updateFunc(pt, func_index, air, liveness);
^
src/Zcu/PerThread.zig:1721:22: 0x25c57b3 in linkerUpdateFunc (zig)
lf.updateFunc(pt, func_index, air, liveness) catch |err| switch (err) {
^
src/link.zig:1577:36: 0x21fad35 in doTask (zig)
pt.linkerUpdateFunc(func.func, func.air) catch |err| switch (err) {
^
src/Compilation.zig:3997:20: 0x1e4e744 in dispatchCodegenTask (zig)
link.doTask(comp, tid, link_task);
^
src/Compilation.zig:3892:37: 0x1c0d547 in processOneJob (zig)
comp.dispatchCodegenTask(tid, .{ .codegen_func = func });
^
src/Compilation.zig:3842:30: 0x1a858dd in performAllTheWorkInner (zig)
try processOneJob(@intFromEnum(Zcu.PerThread.Id.main), comp, job);
^
src/Compilation.zig:3641:36: 0x1910b3c in performAllTheWork (zig)
try comp.performAllTheWorkInner(main_progress_node);
^
src/Compilation.zig:2256:31: 0x1909074 in update (zig)
try comp.performAllTheWork(main_progress_node);
^
src/main.zig:4482:20: 0x19462f7 in updateModule (zig)
try comp.update(prog_node);
^
src/main.zig:3672:21: 0x19b3229 in buildOutputType (zig)
updateModule(comp, color, root_prog_node) catch |err| switch (err) {
^
src/main.zig:279:31: 0x1865c05 in mainArgs (zig)
return buildOutputType(gpa, arena, args, .{ .build = .Obj });
^
src/main.zig:214:20: 0x1862cba in main (zig)
return mainArgs(gpa, arena, args);
^
lib/std/start.zig:656:37: 0x18627a9 in main (zig)
const result = root.main() catch |err| {
^
???:?:?: 0x7fab9582b3ed in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7fab9582b3ed` was not available, trace may be incomplete
Aborted (core dumped)
$ debug-zig build-obj -fno-llvm -target x86_64-linux repro.zig
thread 351477 panic: reached unreachable code
src/arch/x86_64/CodeGen.zig:33317:49: 0x3f9655a in airCmp (zig)
else => unreachable,
^
src/arch/x86_64/CodeGen.zig:21136:117: 0x3c6cf20 in genBody (zig)
if (cg.intInfo(scalar_ty) == null and cg.floatBits(scalar_ty) == null) break :fallback try cg.airCmp(inst, switch (air_tag) {
^
src/arch/x86_64/CodeGen.zig:2229:25: 0x38de8c7 in gen (zig)
try self.genBody(self.air.getMainBody());
^
src/arch/x86_64/CodeGen.zig:980:17: 0x35f5274 in generate (zig)
function.gen() catch |err| switch (err) {
^
src/codegen.zig:72:51: 0x32dbbc7 in generateFunction (zig)
return importBackend(backend).generate(lf, pt, src_loc, func_index, air, liveness, code, debug_output);
^
src/link/Elf/ZigObject.zig:1440:33: 0x32dc2e2 in updateFunc (zig)
try codegen.generateFunction(
^
src/link/Elf.zig:2370:44: 0x2e8a567 in updateFunc (zig)
return self.zigObjectPtr().?.updateFunc(self, pt, func_index, air, liveness);
^
src/link.zig:736:82: 0x2a4bcbd in updateFunc (zig)
return @as(*tag.Type(), @fieldParentPtr("base", base)).updateFunc(pt, func_index, air, liveness);
^
src/Zcu/PerThread.zig:1721:22: 0x25c57b3 in linkerUpdateFunc (zig)
lf.updateFunc(pt, func_index, air, liveness) catch |err| switch (err) {
^
src/link.zig:1577:36: 0x21fad35 in doTask (zig)
pt.linkerUpdateFunc(func.func, func.air) catch |err| switch (err) {
^
src/link.zig:1383:34: 0x1e24cf2 in flushTaskQueue (zig)
for (tasks) |task| doTask(comp, tid, task);
^
lib/std/Thread/Pool.zig:182:50: 0x1e24f09 in runFn (zig)
@call(.auto, func, .{id.?} ++ closure.arguments);
^
lib/std/Thread/Pool.zig:295:32: 0x1dd4db4 in worker (zig)
run_node.data.runFn(&run_node.data, id);
^
lib/std/Thread.zig:488:13: 0x1bbd08a in callFn__anon_175550 (zig)
@call(.auto, f, args);
^
lib/std/Thread.zig:757:30: 0x1a44ce4 in entryFn (zig)
return callFn(f, args_ptr.*);
^
???:?:?: 0x7fea38f47508 in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7fea38f47508` was not available, trace may be incomplete
Aborted (core dumped)
$ x86_64-rewrite-zig build-obj -fno-llvm -target x86_64-linux repro.zig
repro.zig:1:1: error: failed to select cmp_eq ?@Vector(1, u8) |(none)| xmm0 |(none)| xmm1
fn cmp(x: ?@Vector(1, u8), y: ?@Vector(1, u8)) bool {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is a frontend bug for not rejecting the code unless and until the operation is defined in the language spec at which point it would become a backend bug.
This is a frontend bug for not rejecting the code unless and until the operation is defined in the language spec at which point it would become a backend bug.