diff options
| author | gingerBill <bill@gingerbill.org> | 2021-10-23 19:24:47 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-10-23 19:24:47 +0100 |
| commit | b4df51e4834cda2d37a353717133663e9e1393c3 (patch) | |
| tree | d98a3621bed8e2079c9f9d5794d3fd24bd9269b3 /src/checker.cpp | |
| parent | 209684d5a4843fd52a248acd361b9791a96e6205 (diff) | |
| parent | 06f47621442973a664b5928bb20295f4b7b56196 (diff) | |
Merge branch 'master' into new-matrix-type
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index 23597167b..8db9e1bd6 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1111,9 +1111,12 @@ 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)); + GB_ASSERT(map_get(c->untyped, hash_pointer(e)) == nullptr); } else { + auto *untyped = &c->info->global_untyped; mutex_lock(&c->info->global_untyped_mutex); - map_remove(&c->info->global_untyped, hash_pointer(e)); + map_remove(untyped, hash_pointer(e)); + GB_ASSERT(map_get(untyped, hash_pointer(e)) == nullptr); mutex_unlock(&c->info->global_untyped_mutex); } } @@ -1190,7 +1193,13 @@ 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; } else if (mode == Addressing_Value && is_type_typeid(type)) { |