Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stage2: Compiler crash with "panic: zig compiler bug: GenericPoison" #12373

Open
misanthrop opened this issue Aug 8, 2022 · 5 comments
Open
Labels
bug Observed behavior contradicts documented or intended behavior frontend Tokenization, parsing, AstGen, Sema, and Liveness.
Milestone

Comments

@misanthrop
Copy link

misanthrop commented Aug 8, 2022

Zig Version

0.10.0-dev.3475+b3d463c9e

Steps to Reproduce

Try testing the following code with zig test -fno-stage1 -fLLVM a.zig:

fn f1(comptime T: type, comptime _: struct { f: fn(T) T = f2(T) }) void {}
fn f2(comptime T: type) fn(T) T { return struct { fn f(v: T) T { return v; } }.f; }
test { _ = f1(i32, .{ .x = 11 }); }

Expected Behavior

I would expect a compilation error, like struct doesn't have a field "x".

Actual Behavior

Compiler crashes with the message:

thread 10071 panic: zig compiler bug: GenericPoison
@misanthrop misanthrop added the bug Observed behavior contradicts documented or intended behavior label Aug 8, 2022
@misanthrop misanthrop changed the title Compiler crash with "panic: zig compiler bug: GenericPoison" Stage2: Compiler crash with "panic: zig compiler bug: GenericPoison" Aug 8, 2022
@Vexu Vexu added the frontend Tokenization, parsing, AstGen, Sema, and Liveness. label Aug 8, 2022
@Vexu Vexu added this to the 0.10.0 milestone Aug 8, 2022
@naoki9911
Copy link
Contributor

I met the same problem.

Zig Version

0.10.0-dev.3871+b7d5582de

Steps to Reproduce

Trying to run below code with zig run -fno-stage1 src/main.zig

const std = @import("std");
pub fn main() !void {
    f(std.log.warn);
}

pub fn f(pf: *const fn (a: []const u8, anytype) void) void {
    pf("", .{});
}

Expected Behavior

Success to compile and exit with stdout message.

warn:

Actual Behavior

Compiler crashes with the message:

thread 21735 panic: zig compiler bug: GenericPoison

@davidgm94
Copy link
Contributor

Stack trace for the first one:

thread 27345 panic: zig compiler bug: GenericPoison
/home/david/dev/official-zig/src/Sema.zig:5711:5: 0x55c17f1893ba in Sema.zirCall (zig2)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
    ^
/home/david/dev/official-zig/src/Sema.zig:727:46: 0x55c17efe5014 in Sema.analyzeBodyInner (zig2)
            .call                         => try sema.zirCall(block, inst),
                                             ^
/home/david/dev/official-zig/src/Sema.zig:630:21: 0x55c17efdfc55 in Sema.analyzeBodyBreak (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:593:25: 0x55c17f41c880 in Sema.resolveBody (zig2)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                        ^
/home/david/dev/official-zig/src/Sema.zig:28835:30: 0x55c17f32bd61 in Sema.semaStructFields (zig2)
                const init = try sema.resolveBody(&block_scope, body, struct_obj.zir_index);
                             ^
/home/david/dev/official-zig/src/Sema.zig:28463:5: 0x55c17f0703ac in Sema.resolveTypeFieldsStruct (zig2)
    try semaStructFields(sema.mod, struct_obj);
    ^
/home/david/dev/official-zig/src/Sema.zig:28414:13: 0x55c17eea538f in Sema.resolveTypeFields (zig2)
            try sema.resolveTypeFieldsStruct(ty, struct_obj);
            ^
/home/david/dev/official-zig/src/Sema.zig:16609:29: 0x55c17f451f52 in Sema.fieldType (zig2)
        const resolved_ty = try sema.resolveTypeFields(block, ty_src, cur_ty);
                            ^
/home/david/dev/official-zig/src/Sema.zig:16596:5: 0x55c17f1c7043 in Sema.zirFieldType (zig2)
    return sema.fieldType(block, aggregate_ty, field_name, field_src, ty_src);
    ^
/home/david/dev/official-zig/src/Sema.zig:817:46: 0x55c17efe97c2 in Sema.analyzeBodyInner (zig2)
            .field_type                   => try sema.zirFieldType(block, inst),
                                             ^
/home/david/dev/official-zig/src/Sema.zig:630:21: 0x55c17efdfc55 in Sema.analyzeBodyBreak (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:593:25: 0x55c17f41c880 in Sema.resolveBody (zig2)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                        ^
/home/david/dev/official-zig/src/Sema.zig:5704:26: 0x55c17f189244 in Sema.zirCall (zig2)
        const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
                         ^
/home/david/dev/official-zig/src/Sema.zig:727:46: 0x55c17efe5014 in Sema.analyzeBodyInner (zig2)
            .call                         => try sema.zirCall(block, inst),
                                             ^
/home/david/dev/official-zig/src/Sema.zig:613:21: 0x55c17efd8acf in Sema.analyzeBody (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:15747:13: 0x55c17f472925 in Sema.analyzeRet (zig2)
            return error.ComptimeReturn;
            ^
/home/david/dev/official-zig/src/Sema.zig:15631:9: 0x55c17f22ec0f in Sema.zirRetLoad (zig2)
        return sema.analyzeRet(block, operand, src);
        ^
/home/david/dev/official-zig/src/Sema.zig:1532:5: 0x55c17eff4aa8 in Sema.analyzeBodyInner (zig2)
    return result;
    ^
/home/david/dev/official-zig/src/Sema.zig:613:21: 0x55c17efd8acf in Sema.analyzeBody (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:1688:32: 0x55c17eff908d in Sema.resolveConstValue (zig2)
            .generic_poison => return error.GenericPoison,
                               ^
/home/david/dev/official-zig/src/Sema.zig:1595:17: 0x55c17f236490 in Sema.analyzeAsType (zig2)
    const val = try sema.resolveConstValue(block, src, coerced_inst, "types must be comptime known");
                ^
/home/david/dev/official-zig/src/Sema.zig:1688:32: 0x55c17eff908d in Sema.resolveConstValue (zig2)
            .generic_poison => return error.GenericPoison,
                               ^
/home/david/dev/official-zig/src/Sema.zig:1595:17: 0x55c17f236490 in Sema.analyzeAsType (zig2)
    const val = try sema.resolveConstValue(block, src, coerced_inst, "types must be comptime known");
                ^
/home/david/dev/official-zig/src/Sema.zig:1582:16: 0x55c17f40feb0 in Sema.resolveType (zig2)
    const ty = try sema.analyzeAsType(block, src, air_inst);
               ^
/home/david/dev/official-zig/src/Sema.zig:1688:32: 0x55c17eff908d in Sema.resolveConstValue (zig2)
            .generic_poison => return error.GenericPoison,
                               ^
/home/david/dev/official-zig/src/Sema.zig:1595:17: 0x55c17f236490 in Sema.analyzeAsType (zig2)
    const val = try sema.resolveConstValue(block, src, coerced_inst, "types must be comptime known");
                ^
/home/david/dev/official-zig/src/Sema.zig:1688:32: 0x55c17eff908d in Sema.resolveConstValue (zig2)
            .generic_poison => return error.GenericPoison,
                               ^
/home/david/dev/official-zig/src/Sema.zig:1595:17: 0x55c17f236490 in Sema.analyzeAsType (zig2)
    const val = try sema.resolveConstValue(block, src, coerced_inst, "types must be comptime known");
                ^
/home/david/dev/official-zig/src/Sema.zig:1582:16: 0x55c17f40feb0 in Sema.resolveType (zig2)
    const ty = try sema.analyzeAsType(block, src, air_inst);
               ^
/home/david/dev/official-zig/src/Sema.zig:1668:32: 0x55c17f45c24e in Sema.resolveConstMaybeUndefVal (zig2)
            .generic_poison => return error.GenericPoison,
                               ^
/home/david/dev/official-zig/src/Sema.zig:6350:21: 0x55c17f62b3a1 in Sema.analyzeInlineCallArg (zig2)
                    return err;
                    ^
/home/david/dev/official-zig/src/Sema.zig:6093:29: 0x55c17f4209fa in Sema.analyzeCall (zig2)
                else => |e| return e,
                            ^
/home/david/dev/official-zig/src/Module.zig:5594:32: 0x55c17eddc16a in Module.analyzeFnBody (zig2)
        error.GenericPoison => @panic("zig compiler bug: GenericPoison"),
                               ^
/home/david/dev/official-zig/src/Module.zig:4291:40: 0x55c17edbc96a in Module.ensureFuncBodyAnalyzed (zig2)
            var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
                                       ^
/home/david/dev/official-zig/src/Compilation.zig:3047:42: 0x55c17eaac71c in Compilation.processOneJob (zig2)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/david/dev/official-zig/src/Compilation.zig:2985:30: 0x55c17ea9a46f in Compilation.performAllTheWork (zig2)
            try processOneJob(comp, work_item);
                             ^
/home/david/dev/official-zig/src/Compilation.zig:2325:31: 0x55c17ea92b1d in Compilation.update (zig2)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/david/dev/official-zig/src/main.zig:3304:20: 0x55c17ea1e0ff in main.updateModule (zig2)
    try comp.update();
                   ^
/home/david/dev/official-zig/src/main.zig:2989:17: 0x55c17e96b1e4 in main.buildOutputType (zig2)
    updateModule(gpa, comp, hook) catch |err| switch (err) {
                ^
/home/david/dev/official-zig/src/main.zig:236:31: 0x55c17e90e70e in main.mainArgs (zig2)
        return buildOutputType(gpa, arena, args, .zig_test);
                              ^
/home/david/dev/official-zig/src/stage1.zig:48:24: 0x55c17e90de59 in main (zig2)
        stage2.mainArgs(gpa, arena, args) catch unreachable;

Stack trace for the second one:

thread 27426 panic: zig compiler bug: GenericPoison
/home/david/dev/official-zig/src/Sema.zig:1296:40: 0x565479b44102 in Sema.analyzeBodyInner (zig2)
                const opt_break_data = try sema.analyzeBodyBreak(block, inline_body);
                                       ^
/home/david/dev/official-zig/src/Sema.zig:630:21: 0x565479b31c55 in Sema.analyzeBodyBreak (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:593:25: 0x565479f6e880 in Sema.resolveBody (zig2)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                        ^
/home/david/dev/official-zig/src/Sema.zig:6341:35: 0x56547a17d12a in Sema.analyzeInlineCallArg (zig2)
            const param_ty_inst = try sema.resolveBody(param_block, param_body, inst);
                                  ^
/home/david/dev/official-zig/src/Sema.zig:6075:21: 0x565479f72c05 in Sema.analyzeCall (zig2)
                    try sema.analyzeInlineCallArg(
                    ^
/home/david/dev/official-zig/src/Sema.zig:5711:5: 0x565479cdb3ba in Sema.zirCall (zig2)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
    ^
/home/david/dev/official-zig/src/Sema.zig:727:46: 0x565479b37014 in Sema.analyzeBodyInner (zig2)
            .call                         => try sema.zirCall(block, inst),
                                             ^
/home/david/dev/official-zig/src/Sema.zig:613:21: 0x565479b2aacf in Sema.analyzeBody (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:613:21: 0x565479b2aacf in Sema.analyzeBody (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:1201:21: 0x565479b4356c in Sema.analyzeBodyInner (zig2)
                    return error.ComptimeBreak;
                    ^
/home/david/dev/official-zig/src/Sema.zig:8106:53: 0x565479f82e7f in Sema.funcCommon (zig2)
        if (is_generic and sema.no_partial_func_ty) return error.GenericPoison;
                                                    ^
/home/david/dev/official-zig/src/Sema.zig:7728:5: 0x565479ce4c8c in Sema.zirFunc (zig2)
    return sema.funcCommon(
    ^
/home/david/dev/official-zig/src/Sema.zig:760:46: 0x565479b38a9b in Sema.analyzeBodyInner (zig2)
            .func                         => try sema.zirFunc(block, inst, false),
                                             ^
/home/david/dev/official-zig/src/Sema.zig:630:21: 0x565479b31c55 in Sema.analyzeBodyBreak (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:1296:40: 0x565479b44102 in Sema.analyzeBodyInner (zig2)
                const opt_break_data = try sema.analyzeBodyBreak(block, inline_body);
                                       ^
/home/david/dev/official-zig/src/Sema.zig:630:21: 0x565479b31c55 in Sema.analyzeBodyBreak (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:593:25: 0x565479f6e880 in Sema.resolveBody (zig2)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                        ^
/home/david/dev/official-zig/src/Sema.zig:6802:13: 0x56547a17aabd in Sema.instantiateGenericCall (zig2)
            return error.GenericPoison;
            ^
/home/david/dev/official-zig/src/Sema.zig:1201:21: 0x565479b4356c in Sema.analyzeBodyInner (zig2)
                    return error.ComptimeBreak;
                    ^
/home/david/dev/official-zig/src/Sema.zig:1201:21: 0x565479b4356c in Sema.analyzeBodyInner (zig2)
                    return error.ComptimeBreak;
                    ^
/home/david/dev/official-zig/src/Sema.zig:1201:21: 0x565479b4356c in Sema.analyzeBodyInner (zig2)
                    return error.ComptimeBreak;
                    ^
/home/david/dev/official-zig/src/Sema.zig:1969:13: 0x565479b531cc in Sema.failWithOwnedErrorMsg (zig2)
            return error.NeededSourceLocation;
            ^
/home/david/dev/official-zig/src/Sema.zig:23600:5: 0x565479b51c35 in Sema.coerceExtra (zig2)
    return sema.failWithOwnedErrorMsg(msg);
    ^
/home/david/dev/official-zig/src/Sema.zig:22962:21: 0x565479b4ae26 in Sema.coerce (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:23060:17: 0x565479b4ca14 in Sema.coerceExtra (zig2)
                return sema.coerce(block, dest_ty, inst_as_ptr, inst_src);
                ^
/home/david/dev/official-zig/src/Sema.zig:22962:21: 0x565479b4ae26 in Sema.coerce (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Sema.zig:6353:32: 0x56547a17d442 in Sema.analyzeInlineCallArg (zig2)
            const casted_arg = try sema.coerce(arg_block, param_ty, uncasted_arg, arg_src);
                               ^
/home/david/dev/official-zig/src/Sema.zig:1201:21: 0x565479b4356c in Sema.analyzeBodyInner (zig2)
                    return error.ComptimeBreak;
                    ^
/home/david/dev/official-zig/src/Sema.zig:29574:28: 0x565479b2a015 in Sema.typeHasOnePossibleValue (zig2)
        .generic_poison => return error.GenericPoison,
                           ^
/home/david/dev/official-zig/src/Sema.zig:8392:21: 0x565479d76d60 in Sema.zirParamAnytype (zig2)
        if (null != try sema.typeHasOnePossibleValue(block, src, param_ty)) {
                    ^
/home/david/dev/official-zig/src/Sema.zig:1134:17: 0x565479b42e0c in Sema.analyzeBodyInner (zig2)
                try sema.zirParamAnytype(block, inst, false);
                ^
/home/david/dev/official-zig/src/Sema.zig:630:21: 0x565479b31c55 in Sema.analyzeBodyBreak (zig2)
        else => |e| return e,
                    ^
/home/david/dev/official-zig/src/Module.zig:5594:32: 0x56547992e16a in Module.analyzeFnBody (zig2)
        error.GenericPoison => @panic("zig compiler bug: GenericPoison"),
                               ^
/home/david/dev/official-zig/src/Module.zig:4291:40: 0x56547990e96a in Module.ensureFuncBodyAnalyzed (zig2)
            var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
                                       ^
/home/david/dev/official-zig/src/Sema.zig:26405:36: 0x56547a05b773 in Sema.ensureFuncBodyAnalyzed (zig2)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
/home/david/dev/official-zig/src/Sema.zig:28530:40: 0x565479f8570f in Sema.resolveInferredErrorSet (zig2)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                       ^
/home/david/dev/official-zig/src/Sema.zig:26684:49: 0x565479d7dc59 in Sema.analyzeIsNonErrComptimeOnly (zig2)
                try sema.resolveInferredErrorSet(block, src, ies);
                                                ^
/home/david/dev/official-zig/src/Sema.zig:26711:56: 0x565479f85045 in Sema.analyzeIsNonErr (zig2)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/david/dev/official-zig/src/Sema.zig:15296:32: 0x565479ce9640 in Sema.zirIsNonErr (zig2)
    return sema.analyzeIsNonErr(block, inst_data.src(), operand);
                               ^
/home/david/dev/official-zig/src/Sema.zig:770:66: 0x565479b39212 in Sema.analyzeBodyInner (zig2)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/david/dev/official-zig/src/Sema.zig:4972:34: 0x565479f96f56 in Sema.resolveBlockBody (zig2)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/david/dev/official-zig/src/Sema.zig:4955:33: 0x565479d7a1dd in Sema.zirBlock (zig2)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/david/dev/official-zig/src/Sema.zig:1250:69: 0x565479b43c75 in Sema.analyzeBodyInner (zig2)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/home/david/dev/official-zig/src/Sema.zig:4972:34: 0x565479f96f56 in Sema.resolveBlockBody (zig2)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/david/dev/official-zig/src/Sema.zig:9877:49: 0x565479cf4fc8 in Sema.zirSwitchBlock (zig2)
                    return sema.resolveBlockBody(block, src, &child_block, body, inst, merges);
                                                ^
/home/david/dev/official-zig/src/Sema.zig:792:69: 0x565479b3a358 in Sema.analyzeBodyInner (zig2)
            .switch_block                 => try sema.zirSwitchBlock(block, inst),
                                                                    ^
/home/david/dev/official-zig/src/Sema.zig:611:30: 0x565479b2aa9a in Sema.analyzeBody (zig2)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/david/dev/official-zig/src/Sema.zig:6173:33: 0x565479f748dd in Sema.analyzeCall (zig2)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/david/dev/official-zig/src/Sema.zig:19793:28: 0x565479d2b923 in Sema.zirBuiltinCall (zig2)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
/home/david/dev/official-zig/src/Sema.zig:848:69: 0x565479b3cf9b in Sema.analyzeBodyInner (zig2)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/david/dev/official-zig/src/Sema.zig:611:30: 0x565479b2aa9a in Sema.analyzeBody (zig2)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/david/dev/official-zig/src/Sema.zig:6173:33: 0x565479f748dd in Sema.analyzeCall (zig2)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/david/dev/official-zig/src/Sema.zig:5711:28: 0x565479cdb39c in Sema.zirCall (zig2)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
/home/david/dev/official-zig/src/Sema.zig:727:62: 0x565479b36fb5 in Sema.analyzeBodyInner (zig2)
            .call                         => try sema.zirCall(block, inst),
                                                             ^
/home/david/dev/official-zig/src/Sema.zig:611:30: 0x565479b2aa9a in Sema.analyzeBody (zig2)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/david/dev/official-zig/src/Sema.zig:6173:33: 0x565479f748dd in Sema.analyzeCall (zig2)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/david/dev/official-zig/src/Sema.zig:19793:28: 0x565479d2b923 in Sema.zirBuiltinCall (zig2)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
/home/david/dev/official-zig/src/Sema.zig:848:69: 0x565479b3cf9b in Sema.analyzeBodyInner (zig2)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/david/dev/official-zig/src/Sema.zig:628:45: 0x565479b31c1c in Sema.analyzeBodyBreak (zig2)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/david/dev/official-zig/src/Sema.zig:593:50: 0x565479f6e860 in Sema.resolveBody (zig2)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/home/david/dev/official-zig/src/Sema.zig:5704:46: 0x565479cdbab5 in Sema.zirCall (zig2)
        const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
                                             ^
/home/david/dev/official-zig/src/Sema.zig:727:62: 0x565479b36fb5 in Sema.analyzeBodyInner (zig2)
            .call                         => try sema.zirCall(block, inst),
                                                             ^
/home/david/dev/official-zig/src/Sema.zig:611:30: 0x565479b2aa9a in Sema.analyzeBody (zig2)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/david/dev/official-zig/src/Module.zig:5591:21: 0x56547992e043 in Module.analyzeFnBody (zig2)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/david/dev/official-zig/src/Module.zig:4291:40: 0x56547990e96a in Module.ensureFuncBodyAnalyzed (zig2)
            var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
                                       ^
/home/david/dev/official-zig/src/Compilation.zig:3047:42: 0x5654795fe71c in Compilation.processOneJob (zig2)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/david/dev/official-zig/src/Compilation.zig:2985:30: 0x5654795ec46f in Compilation.performAllTheWork (zig2)
            try processOneJob(comp, work_item);
                             ^
/home/david/dev/official-zig/src/Compilation.zig:2325:31: 0x5654795e4b1d in Compilation.update (zig2)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/david/dev/official-zig/src/main.zig:3304:20: 0x5654795700ff in main.updateModule (zig2)
    try comp.update();
                   ^
/home/david/dev/official-zig/src/main.zig:2989:17: 0x5654794bd1e4 in main.buildOutputType (zig2)
    updateModule(gpa, comp, hook) catch |err| switch (err) {
                ^
/home/david/dev/official-zig/src/main.zig:238:31: 0x5654794607df in main.mainArgs (zig2)
        return buildOutputType(gpa, arena, args, .run);
                              ^
/home/david/dev/official-zig/src/stage1.zig:48:24: 0x56547945fe59 in main (zig2)
        stage2.mainArgs(gpa, arena, args) catch unreachable;
                       ^

@Hanaasagi
Copy link
Sponsor

Similar problem for me 👀

I passed a function that does not match the type signature. And got GenericPoison

    fn internalPrint(self: Self, out: anytype, f: fn (Row, anytype, TableFormat, []const usize) ?usize) !usize {

@HurricanKai
Copy link
Contributor

I believe I've encountered the same issue, although with maybe a bit simpler of a reproduction?

fn read_vector(comptime T: type, allocator: Allocator, reader: anytype, comptime callback: fn (anytype) anyerror!T) ![]T {
    const len = try read_u32(reader);
    const result = try allocator.alloc(T, len);
    errdefer allocator.free(result);
    for (result) |*element| {
        element.* = try callback(reader);
    }
    return result;
}

calling this with a callback that takes the wrong parameters, causes the error.
For example:
read_vector(u32, allocator, reader, struct { fn f() !u32 { return 0; } }.f)
Already causes a GenericPoison.

@Opioid
Copy link

Opioid commented Jul 20, 2023

I'm getting an error with the same name. It started with the new splatting syntax, although I haven't been able to isolate the issue. I'm unable to fix the build, so I'm using an older compiler for now.

@andrewrk andrewrk modified the milestones: 0.11.0, 0.11.1 Jul 22, 2023
@andrewrk andrewrk modified the milestones: 0.11.1, 0.12.0, 0.13.0 Jan 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Observed behavior contradicts documented or intended behavior frontend Tokenization, parsing, AstGen, Sema, and Liveness.
Projects
None yet
Development

No branches or pull requests

8 participants