Skip to content

x86_64: integer overflow in legalize with large packed struct field #24177

Open
@xdBronch

Description

@xdBronch

Zig Version

0.15.0-dev.828+3ce8d19f7

Steps to Reproduce and Observed Behavior

export fn foo() void {
    var a: packed struct { n: u65409 = 0 } = .{};
    _ = &a;
    _ = a.n;
}
thread 32455 panic: integer overflow
/home/user/dev/zig/src/Zcu/PerThread.zig:3493:98: 0x1918796 in ptrType (main.zig)
            assert(info.packed_offset.bit_offset + elem_bit_size <= info.packed_offset.host_size * 8);
                                                                                                 ^
/home/user/dev/zig/src/Air/Legalize.zig:2503:44: 0x2c894bc in addStructFieldPtr (main.zig)
        const field_ptr_ty = try pt.ptrType(field_ptr_info);
                                           ^
/home/user/dev/zig/src/Air/Legalize.zig:2290:68: 0x27a38db in packedStructFieldValBlockPayload (main.zig)
                        .operand = (try res_block.addStructFieldPtr(l, agg_alloc_inst.toRef(), orig_extra.field_index)).toRef(),
                                                                   ^
/home/user/dev/zig/src/Air/Legalize.zig:550:116: 0x24037e4 in legalizeBody (main.zig)
                    .@"packed" => continue :inst l.replaceInst(inst, .block, try l.packedStructFieldValBlockPayload(inst)),
                                                                                                                   ^

anything below u65409 works

Expected Behavior

successful compile

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

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions