Skip to content

stage2 LLVM: Panic when lowering DebugInfo for a pointer to a generic function #12043

@topolarity

Description

@topolarity

Zig Version

0.10.0-dev.2873+0c78ece1c

Steps to Reproduce

Possibly related to #12025. Does not reproduce if you add --strip

fn foo(_: anytype) void { }

test {
    const x = &foo;
    _ = x;
}

Expected Behavior

Test should compile and pass.

Actual Behavior

thread 17368 panic: reached unreachable code
/home/topolarity/repos/zig/src/type.zig:2522:32: 0x30cef6c in type.Type.hasRuntimeBitsAdvanced (zig)
            .generic_poison => unreachable,
                               ^
/home/topolarity/repos/zig/src/type.zig:2654:38: 0x2ea40ed in type.Type.hasRuntimeBitsIgnoreComptime (zig)
        return hasRuntimeBitsAdvanced(ty, true, null) catch unreachable;
                                     ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:9057:45: 0x349f249 in codegen.llvm.ParamTypeIterator.nextInner (zig)
        if (!ty.hasRuntimeBitsIgnoreComptime()) {
                                            ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:9040:25: 0x32c6156 in codegen.llvm.ParamTypeIterator.next (zig)
        return nextInner(it, ty);
                        ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:2794:23: 0x30f6228 in codegen.llvm.DeclGen.lowerTypeFn (zig)
        while (it.next()) |lowering| switch (lowering) {
                      ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:2754:38: 0x30f1b97 in codegen.llvm.DeclGen.lowerType (zig)
            .Fn => return lowerTypeFn(dg, t),
                                     ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:2264:41: 0x30e741b in codegen.llvm.DeclGen.resolveLlvmFunction (zig)
        const fn_type = try dg.lowerType(zig_fn_type);
                                        ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:3748:41: 0x30f7980 in codegen.llvm.DeclGen.lowerDeclRefValue (zig)
            try self.resolveLlvmFunction(decl_index)
                                        ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:2994:54: 0x30ecb5d in codegen.llvm.DeclGen.lowerValue (zig)
                .decl_ref => return lowerDeclRefValue(dg, tv, tv.val.castTag(.decl_ref).?.data),
                                                     ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:3952:48: 0x36aaa01 in codegen.llvm.FuncGen.resolveInst (zig)
        const llvm_val = try self.dg.lowerValue(.{ .ty = ty, .val = val });
                                               ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:5370:45: 0x34c9169 in codegen.llvm.FuncGen.airDbgVarVal (zig)
        const operand = try self.resolveInst(pl_op.operand);
                                            ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:4167:54: 0x349648b in codegen.llvm.FuncGen.genBody (zig)
                .dbg_var_val => try self.airDbgVarVal(inst),
                                                     ^
/home/topolarity/repos/zig/src/codegen/llvm.zig:986:19: 0x348f50e in codegen.llvm.Object.updateFunc (zig)
        fg.genBody(air.getMainBody()) catch |err| switch (err) {
                  ^
/home/topolarity/repos/zig/src/link/Elf.zig:2371:74: 0x326e187 in link.Elf.updateFunc (zig)
        if (self.llvm_object) |llvm_object| return llvm_object.updateFunc(module, func, air, liveness);
                                                                         ^
/home/topolarity/repos/zig/src/link.zig:505:77: 0x309ffbd in link.File.updateFunc (zig)
            .elf   => return @fieldParentPtr(Elf,   "base", base).updateFunc(module, func, air, liveness),
                                                                            ^
/home/topolarity/repos/zig/src/Module.zig:3853:41: 0x30806b5 in Module.ensureFuncBodyAnalyzed (zig)
            mod.comp.bin_file.updateFunc(mod, func, air, liveness) catch |err| switch (err) {
                                        ^
/home/topolarity/repos/zig/src/Compilation.zig:2937:42: 0x2dfdaaa in Compilation.processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/topolarity/repos/zig/src/Compilation.zig:2869:30: 0x2dea5fd in Compilation.performAllTheWork (zig)
            try processOneJob(comp, work_item);
                             ^
/home/topolarity/repos/zig/src/Compilation.zig:2218:31: 0x2de2c82 in Compilation.update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/topolarity/repos/zig/src/main.zig:3245:20: 0x2d4e23f in updateModule (zig)
    try comp.update();
                   ^
/home/topolarity/repos/zig/src/main.zig:2934:17: 0x2d163ba in buildOutputType (zig)
    updateModule(gpa, comp, hook) catch |err| switch (err) {
                ^
/home/topolarity/repos/zig/src/main.zig:225:31: 0x2cface6 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .zig_test);
                              ^
/home/topolarity/repos/zig/src/main.zig:174:20: 0x2cf9d34 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/topolarity/repos/zig/lib/std/start.zig:581:37: 0x321f887 in std.start.callMain (zig)
            const result = root.main() catch |err| {
                                    ^
/home/topolarity/repos/zig/lib/std/start.zig:515:12: 0x2cfc787 in std.start.callMainWithArgs (zig)
    return @call(.{ .modifier = .always_inline }, callMain, .{});
           ^
/home/topolarity/repos/zig/lib/std/start.zig:480:12: 0x2cfc532 in std.start.main (zig)
    return @call(.{ .modifier = .always_inline }, callMainWithArgs, .{ @intCast(usize, c_argc), c_argv, envp });
           ^
???:?:?: 0x7f3e604c57fc in ??? (???)
[1]    17368 IOT instruction  ../zig/stage2/bin/zig test test.zig

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions