diff --git a/src/aro/TypeStore.zig b/src/aro/TypeStore.zig index bf6328b2..5e3e820e 100644 --- a/src/aro/TypeStore.zig +++ b/src/aro/TypeStore.zig @@ -610,7 +610,20 @@ pub const QualType = packed struct(u32) { }, .@"struct", .@"union" => |record| { const layout = record.layout orelse return null; - return layout.size_bits / 8; + const size = layout.size_bits / 8; + if (comp.langopts.emulate != .msvc) return size; + const alignment = qt.requestedAlignment(comp) orelse return size; + + const should_round_size = switch (qt.type(comp)) { + .typedef => |typedef| switch (typedef.base.type(comp)) { + .@"struct", .@"union" => true, + else => false, + }, + else => true, + }; + if (!should_round_size) return size; + + return std.mem.alignForward(u64, size, alignment); }, .@"enum" => |enum_ty| { const tag = enum_ty.tag orelse return null; diff --git a/test/cases/alignment on typedef msvc.c b/test/cases/alignment on typedef msvc.c index 227423a0..cc8f4cab 100644 --- a/test/cases/alignment on typedef msvc.c +++ b/test/cases/alignment on typedef msvc.c @@ -36,6 +36,13 @@ __declspec(align(16)) typedef enum { _Static_assert(_Alignof(AlignedEnum) == 16, ""); +typedef struct __declspec(align(16)) { + int x; +} AlignedStruct; + +_Static_assert(_Alignof(AlignedStruct) == 16, ""); +_Static_assert(sizeof(AlignedStruct) == 16, ""); + /** manifest: syntax args = -target x86_64-windows-msvc diff --git a/test/record_runner.zig b/test/record_runner.zig index bed1da80..3c824f90 100644 --- a/test/record_runner.zig +++ b/test/record_runner.zig @@ -341,22 +341,10 @@ const compErr = blk: { "aarch64-generic-windows-msvc:Msvc|0021", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "aarch64-generic-windows-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "aarch64-generic-windows-msvc:Msvc|0025", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "aarch64-generic-windows-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "aarch64-generic-windows-msvc:Msvc|0029", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "aarch64-generic-windows-msvc:Msvc|0037", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -369,10 +357,6 @@ const compErr = blk: { "aarch64-generic-windows-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "aarch64-generic-windows-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "aarch64-generic-windows-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -385,14 +369,6 @@ const compErr = blk: { "aarch64-generic-windows-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "aarch64-generic-windows-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "aarch64-generic-windows-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "aarch64-generic-windows-msvc:Msvc|0072", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -406,29 +382,21 @@ const compErr = blk: { .{ .parse = false, .layout = false, .extra = true, .offset = false }, }, .{ - "x86-i586-windows-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86-i586-windows-msvc:Msvc|0025", + "x86-i586-windows-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, .{ - "x86-i586-windows-msvc:Msvc|0026", + "x86-i586-windows-msvc:Msvc|0029", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, .{ - "x86-i586-windows-msvc:Msvc|0029", + "aarch64-generic-windows-msvc:Msvc|0029", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, .{ "x86-i586-windows-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "x86-i586-windows-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i586-windows-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -441,26 +409,10 @@ const compErr = blk: { "x86-i586-windows-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "x86-i586-windows-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86-i586-windows-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i686-uefi-msvc:Msvc|0018", .{ .parse = false, .layout = false, .extra = true, .offset = false }, }, - .{ - "x86-i686-uefi-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86-i686-uefi-msvc:Msvc|0025", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i686-uefi-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -473,10 +425,6 @@ const compErr = blk: { "x86-i686-uefi-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "x86-i686-uefi-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i686-uefi-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -489,26 +437,10 @@ const compErr = blk: { "x86-i686-uefi-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "x86-i686-uefi-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86-i686-uefi-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i686-windows-msvc:Msvc|0018", .{ .parse = false, .layout = false, .extra = true, .offset = false }, }, - .{ - "x86-i686-windows-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86-i686-windows-msvc:Msvc|0025", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i686-windows-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -521,10 +453,6 @@ const compErr = blk: { "x86-i686-windows-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "x86-i686-windows-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86-i686-windows-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -537,14 +465,6 @@ const compErr = blk: { "x86-i686-windows-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "x86-i686-windows-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86-i686-windows-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "thumb-baseline-windows-msvc:Msvc|0018", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -557,14 +477,6 @@ const compErr = blk: { "thumb-baseline-windows-msvc:Msvc|0021", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "thumb-baseline-windows-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "thumb-baseline-windows-msvc:Msvc|0025", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "thumb-baseline-windows-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -585,10 +497,6 @@ const compErr = blk: { "thumb-baseline-windows-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "thumb-baseline-windows-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "thumb-baseline-windows-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -601,14 +509,6 @@ const compErr = blk: { "thumb-baseline-windows-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "thumb-baseline-windows-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "thumb-baseline-windows-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "thumb-baseline-windows-msvc:Msvc|0072", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -621,14 +521,6 @@ const compErr = blk: { "x86_64-x86_64-uefi-msvc:Msvc|0018", .{ .parse = false, .layout = false, .extra = true, .offset = false }, }, - .{ - "x86_64-x86_64-uefi-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86_64-x86_64-uefi-msvc:Msvc|0025", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86_64-x86_64-uefi-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -641,10 +533,6 @@ const compErr = blk: { "x86_64-x86_64-uefi-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "x86_64-x86_64-uefi-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86_64-x86_64-uefi-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -657,26 +545,10 @@ const compErr = blk: { "x86_64-x86_64-uefi-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "x86_64-x86_64-uefi-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86_64-x86_64-uefi-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86_64-x86_64-windows-msvc:Msvc|0018", .{ .parse = false, .layout = false, .extra = true, .offset = false }, }, - .{ - "x86_64-x86_64-windows-msvc:Msvc|0023", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86_64-x86_64-windows-msvc:Msvc|0025", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86_64-x86_64-windows-msvc:Msvc|0026", .{ .parse = false, .layout = true, .extra = true, .offset = false }, @@ -689,10 +561,6 @@ const compErr = blk: { "x86_64-x86_64-windows-msvc:Msvc|0042", .{ .parse = false, .layout = true, .extra = true, .offset = true }, }, - .{ - "x86_64-x86_64-windows-msvc:Msvc|0044", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, .{ "x86_64-x86_64-windows-msvc:Msvc|0045", .{ .parse = false, .layout = false, .extra = true, .offset = false }, @@ -705,13 +573,5 @@ const compErr = blk: { "x86_64-x86_64-windows-msvc:Msvc|0063", .{ .parse = false, .layout = true, .extra = true, .offset = false }, }, - .{ - "x86_64-x86_64-windows-msvc:Msvc|0065", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, - .{ - "x86_64-x86_64-windows-msvc:Msvc|0066", - .{ .parse = false, .layout = true, .extra = true, .offset = false }, - }, }); };