mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
llvm: fix lowering packed union initiated to zero-bit value
Closes #14980
This commit is contained in:
parent
0c16912733
commit
773b1c4c5c
@ -3815,6 +3815,8 @@ pub const DeclGen = struct {
|
||||
|
||||
const field_ty = union_obj.fields.values()[field_index].ty;
|
||||
if (union_obj.layout == .Packed) {
|
||||
if (!field_ty.hasRuntimeBits())
|
||||
return llvm_union_ty.constNull();
|
||||
const non_int_val = try lowerValue(dg, .{ .ty = field_ty, .val = tag_and_val.val });
|
||||
const ty_bit_size = @intCast(u16, field_ty.bitSize(target));
|
||||
const small_int_ty = dg.context.intType(ty_bit_size);
|
||||
|
||||
@ -1493,3 +1493,23 @@ test "union reassignment can use previous value" {
|
||||
a = U{ .b = a.a };
|
||||
try expect(a.b == 32);
|
||||
}
|
||||
|
||||
test "packed union with zero-bit field" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
|
||||
const S = packed struct {
|
||||
nested: packed union {
|
||||
zero: void,
|
||||
sized: u32,
|
||||
},
|
||||
bar: u32,
|
||||
|
||||
fn doTest(self: @This()) !void {
|
||||
try expect(self.bar == 42);
|
||||
}
|
||||
};
|
||||
try S.doTest(.{ .nested = .{ .zero = {} }, .bar = 42 });
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user