ziglang / zig

General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

Home Page:https://ziglang.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Assertion failed in type_has_bits

daurnimator opened this issue · comments

const std = @import("std");
const testing = std.testing;

test "weird failure" {
    const MyIntWrapper = struct {
        const Self = @This();

        x: i32,

        pub fn create() anyerror!Self {
            return Self{
                .x = 42,
            };
        }
    };

    testing.expectEqual(MyIntWrapper{ .x = 42 }, try MyIntWrapper.create());
}
#10 0x0000555555712d4d in stage2_panic (ptr=0x55555593b1a4 "", len=0) at stage1.zig:33
#11 0x00005555556d1932 in zig_panic (format=0x55555593b240 "Assertion failed at %s:%d in %s. This is a bug in the Zig compiler.") at /home/daurnimator/src/zig/src/util.cpp:20
#12 0x00005555556d20aa in zig_assert (ok=false, file=0x55555593b3c0 "/home/daurnimator/src/zig/src/analyze.cpp", line=5473, func=0x55555593d64e "type_has_bits") at /home/daurnimator/src/zig/src/util.hpp:58
#13 0x00005555556e3c13 in type_has_bits (type_entry=0x555555df5f50) at /home/daurnimator/src/zig/src/analyze.cpp:5473
#14 0x00005555555fd932 in ir_render_unwrap_err_payload (g=0x555555a23af0, executable=0x555555addb00, instruction=0x555555dfa770) at /home/daurnimator/src/zig/src/codegen.cpp:5568
#15 0x000055555560068c in ir_render_instruction (g=0x555555a23af0, executable=0x555555addb00, instruction=0x555555dfa770) at /home/daurnimator/src/zig/src/codegen.cpp:6340
#16 0x0000555555600cc9 in ir_render (g=0x555555a23af0, fn_entry=0x555555adda80) at /home/daurnimator/src/zig/src/codegen.cpp:6446
#17 0x0000555555606e6d in do_code_gen (g=0x555555a23af0) at /home/daurnimator/src/zig/src/codegen.cpp:7795
#18 0x00005555556112e5 in codegen_build_and_link (g=0x555555a23af0) at /home/daurnimator/src/zig/src/codegen.cpp:10341
#19 0x00005555555e443d in main (argc=3, argv=0x7fffffffc1e8) at /home/daurnimator/src/zig/src/main.cpp:1351

Seems to disappear if create doesn't return an error union, or if you preceed the testing.expectEqual line with e.g.

    const y = try MyIntWrapper.create();