From 070e3ea37dd51c2a2080941a056c455f70232148 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 14 Jul 2022 19:30:56 -0700 Subject: LLVM: insert debug logging when LLVM ABI size is wrong --- src/codegen/llvm.zig | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/codegen/llvm.zig') diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index fe35620d38..714ac16c54 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2424,6 +2424,24 @@ pub const DeclGen = struct { } fn lowerType(dg: *DeclGen, t: Type) Allocator.Error!*const llvm.Type { + const llvm_ty = try lowerTypeInner(dg, t); + if (std.debug.runtime_safety) { + if (t.zigTypeTag() != .Opaque and t.hasRuntimeBits() and + !llvm_ty.isOpaqueStruct().toBool()) + { + const zig_size = t.abiSize(dg.module.getTarget()); + const llvm_size = dg.object.target_data.abiSizeOfType(llvm_ty); + if (llvm_size != zig_size) { + log.err("when lowering {}, Zig ABI size = {d} but LLVM ABI size = {d}", .{ + t.fmt(dg.module), zig_size, llvm_size, + }); + } + } + } + return llvm_ty; + } + + fn lowerTypeInner(dg: *DeclGen, t: Type) Allocator.Error!*const llvm.Type { const gpa = dg.gpa; const target = dg.module.getTarget(); switch (t.zigTypeTag()) { -- cgit v1.2.3