diff options
| author | gingerBill <bill@gingerbill.org> | 2021-05-06 14:06:22 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-05-06 14:06:22 +0100 |
| commit | 902be0d09c4bf40735a7b15bfc3afe73198e2d5a (patch) | |
| tree | 969e920a9e7c399da981de4ec9c5c6539e4dbefa /src | |
| parent | 502ad0c10baa98f0dfeb55795b9555e15d4e4d13 (diff) | |
Improve type inference system to allow `&{}` alongside `&T{}` in some cases
Diffstat (limited to 'src')
| -rw-r--r-- | src/check_expr.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index d0e0959d0..75e2bcf5f 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7335,7 +7335,12 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type case_ast_node(ue, UnaryExpr, node); Ast *prev_unary_address_hint = c->unary_address_hint; c->unary_address_hint = unparen_expr(node); - check_expr_base(c, o, ue->expr, type_hint); + + Type *th = type_hint; + if (ue->op.kind == Token_And) { + th = type_deref(th); + } + check_expr_base(c, o, ue->expr, th); c->unary_address_hint = prev_unary_address_hint; node->viral_state_flags |= ue->expr->viral_state_flags; |