aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-03-20 10:24:39 +0000
committergingerBill <bill@gingerbill.org>2024-03-20 10:24:39 +0000
commit553a244fec29f4bf2b32f9813ceb578fa46909fd (patch)
treebcd63dd60ade6e7c54ffbf68b0a2eb8196685c04 /src
parent3bff922b6f066966c550cf6298ab3f2a564f6c5e (diff)
Fix bounds checking
Diffstat (limited to 'src')
-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 06bf9fe1e..12949f0ab 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -3991,17 +3991,20 @@ gb_internal lbAddr lb_build_addr_index_expr(lbProcedure *p, Ast *expr) {
lbValue index = lb_build_expr(p, ie->index);
index = lb_emit_conv(p, index, t_int);
+ isize bounds_len = 0;
lbValue elem = {};
if (t->Matrix.is_row_major) {
+ bounds_len = t->Matrix.row_count;
elem = lb_emit_matrix_ep(p, matrix, index, lb_const_int(p->module, t_int, 0));
} else {
+ bounds_len = t->Matrix.column_count;
elem = lb_emit_matrix_ep(p, matrix, lb_const_int(p->module, t_int, 0), index);
}
elem = lb_emit_conv(p, elem, alloc_type_pointer(type_of_expr(expr)));
auto index_tv = type_and_value_of_expr(ie->index);
if (index_tv.mode != Addressing_Constant) {
- lbValue len = lb_const_int(p->module, t_int, t->Matrix.column_count);
+ lbValue len = lb_const_int(p->module, t_int, bounds_len);
lb_emit_bounds_check(p, ast_token(ie->index), index, len);
}
return lb_addr(elem);