diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-08-19 04:56:08 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-19 04:56:08 -0400 |
| commit | 2ccaa5414b904edb2f4af293291f5401d106f277 (patch) | |
| tree | d587757486c1ae205629c48540b66858ec6fb62a /src/codegen | |
| parent | 7d674d5fb664b6e2d4d3d5b85751ed464dc4c4b9 (diff) | |
| parent | 150786e83c705a34e16f031b7848a440946b2ef9 (diff) | |
| download | zig-2ccaa5414b904edb2f4af293291f5401d106f277.tar.gz zig-2ccaa5414b904edb2f4af293291f5401d106f277.zip | |
Merge pull request #12145 from ziglang/fixes
More ABI size and alignment fixes
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/llvm.zig | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 0586c99432..8c84f61a81 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -273,7 +273,7 @@ pub const Object = struct { var di_compile_unit: ?*llvm.DICompileUnit = null; if (!options.strip) { - switch (options.object_format) { + switch (options.target.ofmt) { .coff => llvm_module.addModuleCodeViewFlag(), else => llvm_module.addModuleDebugInfoFlag(), } @@ -1841,6 +1841,7 @@ pub const Object = struct { } const fields = ty.structFields(); + const layout = ty.containerLayout(); var di_fields: std.ArrayListUnmanaged(*llvm.DIType) = .{}; defer di_fields.deinit(gpa); @@ -1854,7 +1855,7 @@ pub const Object = struct { if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue; const field_size = field.ty.abiSize(target); - const field_align = field.normalAlignment(target); + const field_align = field.alignment(target, layout); const field_offset = std.mem.alignForwardGeneric(u64, offset, field_align); offset = field_offset + field_size; @@ -2757,7 +2758,7 @@ pub const DeclGen = struct { for (struct_obj.fields.values()) |field| { if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue; - const field_align = field.normalAlignment(target); + const field_align = field.alignment(target, struct_obj.layout); const field_ty_align = field.ty.abiAlignment(target); any_underaligned_fields = any_underaligned_fields or field_align < field_ty_align; @@ -3433,7 +3434,7 @@ pub const DeclGen = struct { for (struct_obj.fields.values()) |field, i| { if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue; - const field_align = field.normalAlignment(target); + const field_align = field.alignment(target, struct_obj.layout); big_align = @maximum(big_align, field_align); const prev_offset = offset; offset = std.mem.alignForwardGeneric(u64, offset, field_align); @@ -9376,13 +9377,14 @@ fn llvmFieldIndex( } return null; } - assert(ty.containerLayout() != .Packed); + const layout = ty.containerLayout(); + assert(layout != .Packed); var llvm_field_index: c_uint = 0; for (ty.structFields().values()) |field, i| { if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue; - const field_align = field.normalAlignment(target); + const field_align = field.alignment(target, layout); big_align = @maximum(big_align, field_align); const prev_offset = offset; offset = std.mem.alignForwardGeneric(u64, offset, field_align); |
