mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 20:43:19 +00:00
stage2: fix @sizeOf for structs with comptime fields
This commit is contained in:
parent
2f6a01d0c3
commit
af7e945a7d
@ -5177,7 +5177,7 @@ pub const Type = extern union {
|
||||
|
||||
const field = it.struct_obj.fields.values()[it.field];
|
||||
defer it.field += 1;
|
||||
if (!field.ty.hasRuntimeBits())
|
||||
if (!field.ty.hasRuntimeBits() or field.is_comptime)
|
||||
return FieldOffset{ .field = it.field, .offset = it.offset };
|
||||
|
||||
const field_align = field.normalAlignment(it.target);
|
||||
|
||||
@ -55,6 +55,10 @@ test "alignment of struct with pointer has same alignment as usize" {
|
||||
}
|
||||
|
||||
test "alignment and size of structs with 128-bit fields" {
|
||||
if (builtin.zig_backend == .stage1) {
|
||||
// stage1 gets the wrong answer for a lot of targets
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
|
||||
|
||||
@ -120,6 +120,10 @@ test "bitcast generates a temporary value" {
|
||||
}
|
||||
|
||||
test "@bitCast packed structs at runtime and comptime" {
|
||||
if (builtin.zig_backend == .stage1) {
|
||||
// stage1 gets the wrong answer for a lot of targets
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
|
||||
|
||||
@ -500,6 +500,10 @@ const Bitfields = packed struct {
|
||||
};
|
||||
|
||||
test "packed struct fields are ordered from LSB to MSB" {
|
||||
if (builtin.zig_backend == .stage1) {
|
||||
// stage1 gets the wrong answer for a lot of targets
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
@ -971,6 +975,8 @@ test "comptime struct field" {
|
||||
comptime b: i32 = 1234,
|
||||
};
|
||||
|
||||
comptime std.debug.assert(@sizeOf(T) == 4);
|
||||
|
||||
var foo: T = undefined;
|
||||
comptime try expect(foo.b == 1234);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user