diff options
| author | gingerBill <bill@gingerbill.org> | 2022-01-26 16:37:16 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-01-26 16:37:16 +0000 |
| commit | b190404b217f59b9bed65bdf588a4e0369f60a95 (patch) | |
| tree | c9cfeb57bb405ede369946cadb42ffde01981fdf /src/llvm_backend_expr.cpp | |
| parent | 081a5a52a621f3577255b30a4fa35c9b458d5689 (diff) | |
Fix double map dereference indexing
Diffstat (limited to 'src/llvm_backend_expr.cpp')
| -rw-r--r-- | src/llvm_backend_expr.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 1f0ed6434..9b2e26434 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -3460,7 +3460,8 @@ lbAddr lb_build_addr(lbProcedure *p, Ast *expr) { GB_ASSERT_MSG(is_type_indexable(t), "%s %s", type_to_string(t), expr_to_string(expr)); if (is_type_map(t)) { - lbValue map_val = lb_build_addr_ptr(p, ie->expr); + lbAddr map_addr = lb_build_addr(p, ie->expr); + lbValue map_val = lb_addr_load(p, map_addr); if (deref) { map_val = lb_emit_load(p, map_val); } @@ -3469,7 +3470,8 @@ lbAddr lb_build_addr(lbProcedure *p, Ast *expr) { key = lb_emit_conv(p, key, t->Map.key); Type *result_type = type_of_expr(expr); - return lb_addr_map(map_val, key, t, result_type); + lbValue map_ptr = lb_address_from_load_or_generate_local(p, map_val); + return lb_addr_map(map_ptr, key, t, result_type); } switch (t->kind) { |