aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-08-19 04:56:08 -0400
committerGitHub <noreply@github.com>2022-08-19 04:56:08 -0400
commit2ccaa5414b904edb2f4af293291f5401d106f277 (patch)
treed587757486c1ae205629c48540b66858ec6fb62a /src/codegen/llvm.zig
parent7d674d5fb664b6e2d4d3d5b85751ed464dc4c4b9 (diff)
parent150786e83c705a34e16f031b7848a440946b2ef9 (diff)
downloadzig-2ccaa5414b904edb2f4af293291f5401d106f277.tar.gz
zig-2ccaa5414b904edb2f4af293291f5401d106f277.zip
Merge pull request #12145 from ziglang/fixes
More ABI size and alignment fixes
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig14
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);