aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-10-22 14:37:27 +0100
committergingerBill <bill@gingerbill.org>2021-10-22 14:37:27 +0100
commitc9effb9b9f6dd0400e2396fd2aa6a97e06a14638 (patch)
tree94eaa3427d77dda3700e929bfbba0b05b44fcce1 /src/checker.cpp
parentef73a284e3e438a25a4e329d59057cfa8cddf44c (diff)
Correct ternary if expression type determination
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp12
1 files changed, 7 insertions, 5 deletions
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;