diff options
| author | gingerBill <bill@gingerbill.org> | 2023-11-23 16:56:18 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-11-23 16:56:18 +0000 |
| commit | 4c1a9d2b3f821733ac79135c76e13d3be6f3ed4f (patch) | |
| tree | 3b2588c4fa5b3e4e04fa11a47f44cbd20accb3de /src/check_expr.cpp | |
| parent | 3baf8d92c3efc71d09e28de97a0ba7f303e349e6 (diff) | |
Fix `&x[i]` of `^#soa` types
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 5a8b57df6..7b90677c8 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2339,7 +2339,7 @@ gb_internal void check_unary_expr(CheckerContext *c, Operand *o, Token op, Ast * ast_node(ue, UnaryExpr, node); if (ast_node_expect(ue->expr, Ast_IndexExpr)) { ast_node(ie, IndexExpr, ue->expr); - Type *soa_type = type_of_expr(ie->expr); + Type *soa_type = type_deref(type_of_expr(ie->expr)); GB_ASSERT(is_type_soa_struct(soa_type)); o->type = alloc_type_soa_pointer(soa_type); } else { @@ -7428,7 +7428,7 @@ gb_internal bool check_set_index_data(Operand *o, Type *t, bool indirection, i64 *max_count = t->Struct.soa_count; } o->type = t->Struct.soa_elem; - if (o->mode == Addressing_SoaVariable || o->mode == Addressing_Variable) { + if (o->mode == Addressing_SoaVariable || o->mode == Addressing_Variable || indirection) { o->mode = Addressing_SoaVariable; } else { o->mode = Addressing_Value; |