From 5cbb266ef5666c1df5d25d3afe23e4a777abd22b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 24 Mar 2020 14:29:54 +0000 Subject: Change behaviour of `switch v in &value` to make `v` have by-reference semantics --- src/check_stmt.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/check_stmt.cpp') diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 67172d951..e9b6869c8 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1155,10 +1155,12 @@ void check_type_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) { } } + bool is_reference = false; + if (is_ptr && cc->list.count == 1 && case_type != nullptr) { - case_type = alloc_type_pointer(case_type); + is_reference = true; } if (cc->list.count > 1) { @@ -1173,7 +1175,9 @@ void check_type_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) { { Entity *tag_var = alloc_entity_variable(ctx->scope, lhs->Ident.token, case_type, EntityState_Resolved); tag_var->flags |= EntityFlag_Used; - tag_var->flags |= EntityFlag_Value; + if (!is_reference) { + tag_var->flags |= EntityFlag_Value; + } add_entity(ctx->checker, ctx->scope, lhs, tag_var); add_entity_use(ctx, lhs, tag_var); add_implicit_entity(ctx, stmt, tag_var); -- cgit v1.2.3