zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit d974afde1d366a28f1b07bff6ebfb5c5756d3b61 (tree)
parent f32f7a937fa7150aaba450b1282bba9f01918807
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Mon,  4 Feb 2019 22:14:35 -0500

fix vector debug info tripping LLVM assertion

Diffstat:
Msrc/analyze.cpp | 5+++--
Msrc/zig_llvm.cpp | 6+++---
Msrc/zig_llvm.h | 2+-
3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/analyze.cpp b/src/analyze.cpp @@ -4486,8 +4486,9 @@ ZigType *get_vector_type(CodeGen *g, uint32_t len, ZigType *elem_type) { buf_resize(&entry->name, 0); buf_appendf(&entry->name, "@Vector(%u, %s)", len, buf_ptr(&elem_type->name)); - entry->di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder, len, - LLVMABIAlignmentOfType(g->target_data_ref, entry->type_ref), elem_type->di_type); + entry->di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder, + len * type_size_bits(g, elem_type), + LLVMABIAlignmentOfType(g->target_data_ref, entry->type_ref), elem_type->di_type, len); g->type_table.put(type_id, entry); return entry; diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp @@ -264,12 +264,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugBasicType(ZigLLVMDIBuilder *dibuilder, const ch } struct ZigLLVMDIType *ZigLLVMDIBuilderCreateVectorType(struct ZigLLVMDIBuilder *dibuilder, - uint64_t Size, uint32_t AlignInBits, struct ZigLLVMDIType *Ty) + uint64_t SizeInBits, uint32_t AlignInBits, struct ZigLLVMDIType *Ty, uint32_t elem_count) { SmallVector<Metadata *, 1> subrange; - subrange.push_back(reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateSubrange(0, Size)); + subrange.push_back(reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateSubrange(0, elem_count)); DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createVectorType( - Size, + SizeInBits, AlignInBits, reinterpret_cast<DIType*>(Ty), reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(subrange)); diff --git a/src/zig_llvm.h b/src/zig_llvm.h @@ -192,7 +192,7 @@ ZIG_EXTERN_C struct ZigLLVMDISubprogram *ZigLLVMCreateFunction(struct ZigLLVMDIB unsigned scope_line, unsigned flags, bool is_optimized, struct ZigLLVMDISubprogram *decl_subprogram); ZIG_EXTERN_C struct ZigLLVMDIType *ZigLLVMDIBuilderCreateVectorType(struct ZigLLVMDIBuilder *dibuilder, - uint64_t Size, uint32_t AlignInBits, struct ZigLLVMDIType *Ty); + uint64_t SizeInBits, uint32_t AlignInBits, struct ZigLLVMDIType *Ty, uint32_t elem_count); ZIG_EXTERN_C void ZigLLVMFnSetSubprogram(LLVMValueRef fn, struct ZigLLVMDISubprogram *subprogram);