aboutsummaryrefslogtreecommitdiff
path: root/src/Value.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-09-10 00:06:51 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-09-20 18:33:01 -0700
commit0681bf06abfccdc3c215b712950f17e0bbeb95a0 (patch)
tree7628178f7d290c350c03be867133ddfd265205a1 /src/Value.zig
parente1a750655e05875046abf6a4819062b4f008c330 (diff)
downloadzig-0681bf06abfccdc3c215b712950f17e0bbeb95a0.tar.gz
zig-0681bf06abfccdc3c215b712950f17e0bbeb95a0.zip
frontend: packed struct field ptr no longer finds byte borders
technically breaking, but I doubt anyone will notice.
Diffstat (limited to 'src/Value.zig')
-rw-r--r--src/Value.zig38
1 files changed, 12 insertions, 26 deletions
diff --git a/src/Value.zig b/src/Value.zig
index b3271d85cb..8de5621761 100644
--- a/src/Value.zig
+++ b/src/Value.zig
@@ -2255,32 +2255,18 @@ pub fn ptrField(parent_ptr: Value, field_idx: u32, pt: Zcu.PerThread) !Value {
});
return parent_ptr.getOffsetPtr(byte_off, result_ty, pt);
},
- .@"packed" => switch (aggregate_ty.packedStructFieldPtrInfo(parent_ptr_ty, field_idx, pt)) {
- .bit_ptr => |packed_offset| {
- const result_ty = try pt.ptrType(info: {
- var new = parent_ptr_info;
- new.packed_offset = packed_offset;
- new.child = field_ty.toIntern();
- if (new.flags.alignment == .none) {
- new.flags.alignment = try aggregate_ty.abiAlignmentSema(pt);
- }
- break :info new;
- });
- return pt.getCoerced(parent_ptr, result_ty);
- },
- .byte_ptr => |ptr_info| {
- const result_ty = try pt.ptrTypeSema(info: {
- var new = parent_ptr_info;
- new.child = field_ty.toIntern();
- new.packed_offset = .{
- .host_size = 0,
- .bit_offset = 0,
- };
- new.flags.alignment = ptr_info.alignment;
- break :info new;
- });
- return parent_ptr.getOffsetPtr(ptr_info.offset, result_ty, pt);
- },
+ .@"packed" => {
+ const packed_offset = aggregate_ty.packedStructFieldPtrInfo(parent_ptr_ty, field_idx, pt);
+ const result_ty = try pt.ptrType(info: {
+ var new = parent_ptr_info;
+ new.packed_offset = packed_offset;
+ new.child = field_ty.toIntern();
+ if (new.flags.alignment == .none) {
+ new.flags.alignment = try aggregate_ty.abiAlignmentSema(pt);
+ }
+ break :info new;
+ });
+ return pt.getCoerced(parent_ptr, result_ty);
},
}
},