ziglang / zig

General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
https://ziglang.org
MIT License
33.78k stars 2.47k forks source link

The llvm backend crashes when putting a vector of bool into a packed struct. #17960

Open IntegratedQuantum opened 10 months ago

IntegratedQuantum commented 10 months ago

Zig Version

0.12.0-dev.1577+9ad03b628

Steps to Reproduce and Observed Behavior

pub const Permutation = packed struct(u3) {
    mirror: @Vector(3, bool) = .{false, false, false},
};

var perm: Permutation = undefined;

pub export fn permute(x: @Vector(3, f32)) @Vector(3, f32) {
    return @select(f32, perm.mirror, x, -x);
}
$ zig-debug build-lib test.zig
LLVM Emit Object... thread 153524 panic: Segmentation fault at address 0x8
???:?:?: 0x52fdfa9 in ??? (???)
???:?:?: 0x59a8d7f in ??? (???)
???:?:?: 0x59b0726 in ??? (???)
???:?:?: 0x594722e in ??? (???)
???:?:?: 0x68d21b3 in ??? (???)
???:?:?: 0x685b55a in ??? (???)
???:?:?: 0x684f70f in ??? (???)
???:?:?: 0x5a2c2ff in ??? (???)
???:?:?: 0x5a2b361 in ??? (???)
???:?:?: 0x5ae692d in ??? (???)
???:?:?: 0x5ae60d1 in ??? (???)
???:?:?: 0x5ae42b5 in ??? (???)
???:?:?: 0x69b0a3e in ??? (???)
???:?:?: 0x523d853 in ??? (???)
???:?:?: 0x4321525 in ??? (???)
???:?:?: 0x4326f12 in ??? (???)
???:?:?: 0x4321bd5 in ??? (???)
src/zig_llvm.cpp:357:16: 0x40e53fb in ZigLLVMTargetMachineEmitToFile (/home/mint/zig/src/zig_llvm.cpp)
/home/mint/zig/src/codegen/llvm.zig:1291:43: 0x94a0bdc in flushModule (zig)
        if (self.target_machine.emitToFile(
                                          ^
/home/mint/zig/src/link/Elf.zig:940:36: 0x94c1265 in flushModule (zig)
        try llvm_object.flushModule(comp, prog_node);
                                   ^
/home/mint/zig/src/link.zig:838:74: 0x94994aa in flushModule (zig)
            .elf => return @fieldParentPtr(Elf, "base", base).flushModule(comp, prog_node),
                                                                         ^
/home/mint/zig/src/link.zig:1064:33: 0x91a1be4 in linkAsArchive (zig)
            try base.flushModule(comp, prog_node);
                                ^
/home/mint/zig/src/link.zig:815:38: 0x8e67085 in flush (zig)
            return base.linkAsArchive(comp, prog_node);
                                     ^
/home/mint/zig/src/Compilation.zig:2675:24: 0x8e66a35 in flush (zig)
    comp.bin_file.flush(comp, prog_node) catch |err| switch (err) {
                       ^
/home/mint/zig/src/Compilation.zig:2632:23: 0x8eaa96c in update (zig)
        try comp.flush(main_progress_node);
                      ^
/home/mint/zig/src/main.zig:4279:24: 0x8ed9fd2 in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/mint/zig/src/main.zig:3680:17: 0x8efcb9c in buildOutputType (zig)
    updateModule(comp) catch |err| switch (err) {
                ^
/home/mint/zig/src/main.zig:281:31: 0x8d0a947 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Lib });
                              ^
/home/mint/zig/src/main.zig:223:20: 0x8d07b55 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/mint/zig/lib/std/start.zig:585:37: 0x8d0756e in main (zig)
            const result = root.main() catch |err| {
                                    ^
../sysdeps/nptl/libc_start_call_main.h:58:16: 0x7fddbead9d8f in __libc_start_call_main (../sysdeps/x86/libc-start.c)
../csu/libc-start.c:392:3: 0x7fddbead9e3f in __libc_start_main_impl (../sysdeps/x86/libc-start.c)
???:?:?: 0x40e3b64 in ??? (???)
???:?:?: 0x0 in ??? (???)
Aborted (core dumped)

Expected Behavior

The compiler should not crash.

IntegratedQuantum commented 2 months ago

This seems to work correct now, as of 0.13.0

nektro commented 2 months ago

we should double check there's a test covering this before closing