diff options
| author | gingerBill <bill@gingerbill.org> | 2024-05-09 10:44:06 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-05-09 10:44:06 +0100 |
| commit | 97e9c50d116024901ce029c495495fd723cedf7f (patch) | |
| tree | af5cd31f0c433df6f5d819dc0c80db59a9d43a71 /src/llvm_backend_expr.cpp | |
| parent | 9b75656400b609143147155bf387601a2ab5a242 (diff) | |
Fix #3556
Diffstat (limited to 'src/llvm_backend_expr.cpp')
| -rw-r--r-- | src/llvm_backend_expr.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index ee1a384ae..030926079 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4383,7 +4383,11 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { mask = LLVMConstSub(mask, LLVMConstInt(lit, 1, false)); LLVMValueRef elem = values[i].value; - elem = LLVMBuildZExt(p->builder, elem, lit, ""); + if (lb_sizeof(lit) < lb_sizeof(LLVMTypeOf(elem))) { + elem = LLVMBuildTrunc(p->builder, elem, lit, ""); + } else { + elem = LLVMBuildZExt(p->builder, elem, lit, ""); + } elem = LLVMBuildAnd(p->builder, elem, mask, ""); elem = LLVMBuildShl(p->builder, elem, LLVMConstInt(lit, f.bit_offset, false), ""); |