From e4286d0ff9d383d03b220ac8fc52934853b35c34 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 3 May 2021 15:57:35 +0100 Subject: Force `zero_init` in `lb_add_local` in certain cases --- src/llvm_backend.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/llvm_backend.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 72694e562..2c61132dd 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3424,6 +3424,21 @@ lbAddr lb_add_local(lbProcedure *p, Type *type, Entity *e, bool zero_init, i32 p LLVMSetAlignment(ptr, alignment); LLVMPositionBuilderAtEnd(p->builder, p->curr_block->block); + + + if (!zero_init) { + // If there is any padding of any kind, just zero init regardless of zero_init parameter + LLVMTypeKind kind = LLVMGetTypeKind(llvm_type); + if (kind == LLVMStructTypeKind) { + i64 sz = type_size_of(type); + if (type_size_of_struct_pretend_is_packed(type) != sz) { + zero_init = true; + } + } else if (kind == LLVMArrayTypeKind) { + zero_init = true; + } + } + if (zero_init) { LLVMTypeKind kind = LLVMGetTypeKind(llvm_type); -- cgit v1.2.3