aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-05-09 10:44:06 +0100
committergingerBill <bill@gingerbill.org>2024-05-09 10:44:06 +0100
commit97e9c50d116024901ce029c495495fd723cedf7f (patch)
treeaf5cd31f0c433df6f5d819dc0c80db59a9d43a71 /src/llvm_backend_expr.cpp
parent9b75656400b609143147155bf387601a2ab5a242 (diff)
Fix #3556
Diffstat (limited to 'src/llvm_backend_expr.cpp')
-rw-r--r--src/llvm_backend_expr.cpp6
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), "");