LLVM: insert debug logging when LLVM ABI size is wrong
This commit is contained in:
parent
4c7fe74b2c
commit
070e3ea37d
|
@ -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()) {
|
||||
|
|
|
@ -301,6 +301,9 @@ pub const Type = opaque {
|
|||
|
||||
pub const countStructElementTypes = LLVMCountStructElementTypes;
|
||||
extern fn LLVMCountStructElementTypes(StructTy: *const Type) c_uint;
|
||||
|
||||
pub const isOpaqueStruct = LLVMIsOpaqueStruct;
|
||||
extern fn LLVMIsOpaqueStruct(StructTy: *const Type) Bool;
|
||||
};
|
||||
|
||||
pub const Module = opaque {
|
||||
|
@ -1032,6 +1035,9 @@ pub const TargetData = opaque {
|
|||
|
||||
pub const abiAlignmentOfType = LLVMABIAlignmentOfType;
|
||||
extern fn LLVMABIAlignmentOfType(TD: *const TargetData, Ty: *const Type) c_uint;
|
||||
|
||||
pub const abiSizeOfType = LLVMABISizeOfType;
|
||||
extern fn LLVMABISizeOfType(TD: *const TargetData, Ty: *const Type) c_ulonglong;
|
||||
};
|
||||
|
||||
pub const CodeModel = enum(c_int) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user