Skip to content

stage2 extern union inside packed struct tripping LLVM assertion #11989

@andrewrk

Description

@andrewrk

zig version: 0.10.0-dev.2837+5735ce39a

Semantic Analysis [12517] test.complex.cabs... zig: /home/andy/Downloads/llvm-project-13/llvm/lib/IR/Constants.cpp:2225: static llvm::Constant* llvm::ConstantExpr::getBitCast(llvm::Constant*, llvm::Type*, bool): Assertion `CastInst::castIsValid(Instruction::BitCast, C, DstTy) && "Invalid constantexpr bitcast!"' failed.

Thread 1 "zig" received signal SIGABRT, Aborted.
0x00007ffff7aaabda in raise () from /nix/store/0xxjx37fcy2nl3yz6igmv4mag2a7giq6-glibc-2.33-123/lib/libc.so.6
(gdb) bt
#0  0x00007ffff7aaabda in raise () from /nix/store/0xxjx37fcy2nl3yz6igmv4mag2a7giq6-glibc-2.33-123/lib/libc.so.6
#1  0x00007ffff7a95533 in abort () from /nix/store/0xxjx37fcy2nl3yz6igmv4mag2a7giq6-glibc-2.33-123/lib/libc.so.6
#2  0x00007ffff7a9542f in __assert_fail_base.cold.0 () from /nix/store/0xxjx37fcy2nl3yz6igmv4mag2a7giq6-glibc-2.33-123/lib/libc.so.6
#3  0x00007ffff7aa3622 in __assert_fail () from /nix/store/0xxjx37fcy2nl3yz6igmv4mag2a7giq6-glibc-2.33-123/lib/libc.so.6
#4  0x00000000084468c5 in llvm::ConstantExpr::getBitCast (C=0x25e8d370, DstTy=0xf372f50, OnlyIfReduced=false) at /home/andy/Downloads/llvm-project-13/llvm/lib/IR/Constants.cpp:2225
#5  0x000000000846d6c8 in LLVMConstBitCast (ConstantVal=0x25e8d370, ToType=0xf372f50) at /home/andy/Downloads/llvm-project-13/llvm/lib/IR/Core.cpp:1766
#6  0x000000000104a26e in codegen.llvm.DeclGen.lowerValue (dg=0x7fffffff0470, tv=...) at /home/andy/Downloads/zig/src/codegen/llvm.zig:3322
#7  0x00000000015c2bd2 in codegen.llvm.FuncGen.resolveInst (self=0x7fffffff04b0, inst=377) at /home/andy/Downloads/zig/src/codegen/llvm.zig:3952
#8  0x00000000013dab5a in codegen.llvm.FuncGen.airStore (self=0x7fffffff04b0, inst=303) at /home/andy/Downloads/zig/src/codegen/llvm.zig:7192
#9  0x00000000013bc6be in codegen.llvm.FuncGen.genBody (self=0x7fffffff04b0, body=100 items at 0x25e8653c = {...}) at /home/andy/Downloads/zig/src/codegen/llvm.zig:4078
#10 0x00000000013b7c5c in codegen.llvm.Object.updateFunc (o=0xf36e610, module=0xf370f58, func=0x1db4d570, air=..., liveness=...) at /home/andy/Downloads/zig/src/codegen/llvm.zig:986
#11 0x00000000011b1138 in link.Elf.updateFunc (self=0xf371f30, module=0xf370f58, func=0x1db4d570, air=..., liveness=...) at /home/andy/Downloads/zig/src/link/Elf.zig:2369
#12 0x0000000000ffe70e in link.File.updateFunc (base=0xf371f30, module=0xf370f58, func=0x1db4d570, air=..., liveness=...) at /home/andy/Downloads/zig/src/link.zig:505
#13 0x0000000000fdd5b6 in Module.ensureFuncBodyAnalyzed (mod=0xf370f58, func=0x1db4d570) at /home/andy/Downloads/zig/src/Module.zig:3806
#14 0x0000000000d83beb in Compilation.processOneJob (comp=0xf36ff38, job=...) at /home/andy/Downloads/zig/src/Compilation.zig:2911
#15 0x0000000000d75c18 in Compilation.performAllTheWork (comp=0xf36ff38, main_progress_node=0x7fffffff21e0) at /home/andy/Downloads/zig/src/Compilation.zig:2843
#16 0x0000000000d6eb2e in Compilation.update (comp=0xf36ff38) at /home/andy/Downloads/zig/src/Compilation.zig:2218
#17 0x0000000000cfe0f0 in main.updateModule (gpa=..., comp=0xf36ff38, hook=...) at /home/andy/Downloads/zig/src/main.zig:3245
#18 0x0000000000c5a3d9 in main.buildOutputType (gpa=..., arena=..., all_args=4 items at 0xf36e278 = {...}, arg_mode=...) at /home/andy/Downloads/zig/src/main.zig:2934
#19 0x0000000000c07e87 in main.mainArgs (gpa=..., arena=..., args=4 items at 0xf36e278 = {...}) at /home/andy/Downloads/zig/src/main.zig:225
#20 0x0000000000c0761a in main (argc=4, argv=0x7fffffffa6d8) at /home/andy/Downloads/zig/src/stage1.zig:48
(gdb) 

Steps to reproduce: standard library tests on x86_64-linux with a debug LLVM.

pub const epoll_data = extern union {
    ptr: usize,
    fd: i32,
    @"u32": u32,
    @"u64": u64,
};
// On x86_64 the structure is packed so that it matches the definition of its
// 32bit counterpart
pub const epoll_event = switch (native_arch) {
    .x86_64 => packed struct {
        events: u32,
        data: epoll_data,
    },
    else => extern struct {
        events: u32,
        data: epoll_data,
    },
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    backend-llvmThe LLVM backend outputs an LLVM IR Module.bugObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions