aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-09-08 11:14:26 +0100
committergingerBill <bill@gingerbill.org>2021-09-08 11:14:26 +0100
commit72508dbce3d73458a71a92da8fafd79e184ddd2e (patch)
tree9c21710ae75cafeee0cc32b78a4d4fd020bb6c26 /src/llvm_backend_expr.cpp
parent3e459ba16b7db6929d840f1912dd4d78ceafbcfa (diff)
Fix code gen bug for slicing multi pointers
Diffstat (limited to 'src/llvm_backend_expr.cpp')
-rw-r--r--src/llvm_backend_expr.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index afc5659f6..7ac1b3d36 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -2996,12 +2996,15 @@ lbAddr lb_build_addr(lbProcedure *p, Ast *expr) {
offset.value = LLVMBuildGEP(p->builder, offset.value, indices, 1, "");
lb_addr_store(p, res, offset);
} else {
+ low = lb_emit_conv(p, low, t_int);
+ high = lb_emit_conv(p, high, t_int);
+
lb_emit_multi_pointer_slice_bounds_check(p, se->open, low, high);
LLVMValueRef indices[1] = {low.value};
LLVMValueRef ptr = LLVMBuildGEP(p->builder, base.value, indices, 1, "");
LLVMValueRef len = LLVMBuildSub(p->builder, high.value, low.value, "");
- // TODO(bill): bounds_check for negative length
+
LLVMValueRef gep0 = lb_emit_struct_ep(p, res.addr, 0).value;
LLVMValueRef gep1 = lb_emit_struct_ep(p, res.addr, 1).value;
LLVMBuildStore(p->builder, ptr, gep0);