From c9effb9b9f6dd0400e2396fd2aa6a97e06a14638 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 22 Oct 2021 14:37:27 +0100 Subject: Correct ternary if expression type determination --- src/checker.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/checker.cpp') diff --git a/src/checker.cpp b/src/checker.cpp index ec20d45d6..b1b148a84 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1111,10 +1111,7 @@ void check_set_expr_info(CheckerContext *c, Ast *expr, AddressingMode mode, Type void check_remove_expr_info(CheckerContext *c, Ast *e) { if (c->untyped != nullptr) { map_remove(c->untyped, hash_pointer(e)); - if (map_get(c->untyped, hash_pointer(e)) != nullptr) { - map_remove(c->untyped, hash_pointer(e)); - GB_ASSERT(map_get(c->untyped, hash_pointer(e)) == nullptr); - } + GB_ASSERT(map_get(c->untyped, hash_pointer(e)) == nullptr); } else { auto *untyped = &c->info->global_untyped; mutex_lock(&c->info->global_untyped_mutex); @@ -1196,7 +1193,12 @@ void add_type_and_value(CheckerInfo *i, Ast *expr, AddressingMode mode, Type *ty while (prev_expr != expr) { prev_expr = expr; expr->tav.mode = mode; - expr->tav.type = type; + if (type != nullptr && expr->tav.type != nullptr && + is_type_any(type) && is_type_untyped(expr->tav.type)) { + // ignore + } else { + expr->tav.type = type; + } if (mode == Addressing_Constant || mode == Addressing_Invalid) { expr->tav.value = value; -- cgit v1.2.3