authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-14 23:49:45-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-15 01:04:21-04:00
logd70955b0df92fdd0fdf3680f7f297a4cc676ee5a
tree4931a3dcef12430f8ef7788db233e74559baea46
parentba9d93dc9fd341f4dc08082f894fcbc1060cdcad

x86_64: turn packed struct crashes into compile errors


1 files changed, 9 insertions(+), 0 deletions(-)

src/arch/x86_64/CodeGen.zig+9
......@@ -3053,6 +3053,9 @@ fn structFieldPtr(self: *Self, inst: Air.Inst.Index, operand: Air.Inst.Ref, inde
30533053 const mcv = try self.resolveInst(operand);
30543054 const ptr_ty = self.air.typeOf(operand);
30553055 const struct_ty = ptr_ty.childType();
3056 if (struct_ty.zigTypeTag() == .Struct and struct_ty.containerLayout() == .Packed) {
3057 return self.fail("TODO structFieldPtr implement packed structs", .{});
3058 }
30563059 const struct_field_offset = @intCast(u32, struct_ty.structFieldOffset(index, self.target.*));
30573060
30583061 const dst_mcv: MCValue = result: {
......@@ -3116,6 +3119,9 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void {
31163119
31173120 const mcv = try self.resolveInst(operand);
31183121 const struct_ty = self.air.typeOf(operand);
3122 if (struct_ty.zigTypeTag() == .Struct and struct_ty.containerLayout() == .Packed) {
3123 return self.fail("TODO airStructFieldVal implement packed structs", .{});
3124 }
31193125 const struct_field_offset = struct_ty.structFieldOffset(index, self.target.*);
31203126 const struct_field_ty = struct_ty.structFieldType(index);
31213127
......@@ -6242,6 +6248,9 @@ fn airAggregateInit(self: *Self, inst: Air.Inst.Index) !void {
62426248 if (self.liveness.isUnused(inst)) break :res MCValue.dead;
62436249 switch (result_ty.zigTypeTag()) {
62446250 .Struct => {
6251 if (result_ty.containerLayout() == .Packed) {
6252 return self.fail("TODO airAggregateInit implement packed structs", .{});
6253 }
62456254 const stack_offset = @intCast(i32, try self.allocMem(inst, abi_size, abi_align));
62466255 for (elements, 0..) |elem, elem_i| {
62476256 if (result_ty.structFieldValueComptime(elem_i) != null) continue; // comptime elem