diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-09-10 00:06:51 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-09-20 18:33:01 -0700 |
| commit | 0681bf06abfccdc3c215b712950f17e0bbeb95a0 (patch) | |
| tree | 7628178f7d290c350c03be867133ddfd265205a1 /src/Value.zig | |
| parent | e1a750655e05875046abf6a4819062b4f008c330 (diff) | |
| download | zig-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.zig | 38 |
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); }, } }, |
