commit 5d3be4fbe8372e357a25a7e24e4825425de086fe (tree)
parent 6f4499c9dc069e8a6d6b6113fc918407f9d577cd
Author: David Rubin <sinon@vortan.dev>
Date: Tue, 9 Jun 2026 18:22:37 -0700
Sema: preserve alignment when performing function field call
Diffstat:
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/src/Sema.zig b/src/Sema.zig
@@ -26465,23 +26465,21 @@ fn fieldCallBind(
.@"struct" => {
if (zcu.typeToStruct(concrete_ty)) |struct_type| {
const field_index = struct_type.nameIndex(ip, field_name) orelse break :find_field;
- const field_ty: Type = .fromInterned(struct_type.field_types.get(ip)[field_index]);
-
- return sema.finishFieldCallBind(block, src, ptr_ty, field_ty, field_index, object_ptr);
+ return sema.finishFieldCallBind(block, src, ptr_ty, field_index, object_ptr);
} else if (concrete_ty.isTuple(zcu)) {
if (field_name.eqlSlice("len", ip)) {
return .{ .direct = try pt.intRef(.usize, concrete_ty.structFieldCount(zcu)) };
}
if (field_name.toUnsigned(ip)) |field_index| {
if (field_index >= concrete_ty.structFieldCount(zcu)) break :find_field;
- return sema.finishFieldCallBind(block, src, ptr_ty, concrete_ty.fieldType(field_index, zcu), field_index, object_ptr);
+ return sema.finishFieldCallBind(block, src, ptr_ty, field_index, object_ptr);
}
} else {
const max = concrete_ty.structFieldCount(zcu);
for (0..max) |i_usize| {
const i: u32 = @intCast(i_usize);
if (field_name == concrete_ty.structFieldName(i, zcu).unwrap().?) {
- return sema.finishFieldCallBind(block, src, ptr_ty, concrete_ty.fieldType(i, zcu), i, object_ptr);
+ return sema.finishFieldCallBind(block, src, ptr_ty, i, object_ptr);
}
}
}
@@ -26597,19 +26595,12 @@ fn finishFieldCallBind(
block: *Block,
src: LazySrcLoc,
ptr_ty: Type,
- field_ty: Type,
field_index: u32,
object_ptr: Air.Inst.Ref,
) CompileError!ResolvedFieldCallee {
const pt = sema.pt;
const zcu = pt.zcu;
- const ptr_field_ty = try pt.ptrType(.{
- .child = field_ty.toIntern(),
- .flags = .{
- .is_const = !ptr_ty.ptrIsMutable(zcu),
- .address_space = ptr_ty.ptrAddressSpace(zcu),
- },
- });
+ const ptr_field_ty = try ptr_ty.fieldPtrType(field_index, pt);
const container_ty = ptr_ty.childType(zcu);
if (container_ty.zigTypeTag(zcu) == .@"struct") {