diff options
Diffstat (limited to 'src/check_stmt.cpp')
| -rw-r--r-- | src/check_stmt.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index d741ceabf..9e4504dc1 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1400,7 +1400,7 @@ bool check_expr_is_stack_variable(Ast *expr) { expr = unparen_expr(expr); Entity *e = entity_of_node(expr); if (e && e->kind == Entity_Variable) { - if (e->flags & (EntityFlag_Static|EntityFlag_Using)) { + if (e->flags & (EntityFlag_Static|EntityFlag_Using|EntityFlag_ImplicitReference|EntityFlag_ForValue)) { // okay } else if (e->Variable.thread_local_model.len != 0) { // okay @@ -1941,13 +1941,10 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) { } if (found == nullptr) { entity = alloc_entity_variable(ctx->scope, token, type, EntityState_Resolved); + entity->flags |= EntityFlag_ForValue; entity->flags |= EntityFlag_Value; - if (i == addressable_index) { - if (use_by_reference_for_value) { - entity->flags &= ~EntityFlag_Value; - } else { - entity->flags |= EntityFlag_ForValue; - } + if (i == addressable_index && use_by_reference_for_value) { + entity->flags &= ~EntityFlag_Value; } if (is_soa) { if (i == 0) { |