diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 30b6928ef..c4f953ff7 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -405,7 +405,7 @@ bool is_polymorphic_type_assignable(Checker *c, Type *poly, Type *source, bool c i64 check_distance_between_types(Checker *c, Operand *operand, Type *type) { if (operand->mode == Addressing_Invalid || type == t_invalid) { - return 0; + return -1; } if (operand->mode == Addressing_Builtin) { @@ -1192,8 +1192,9 @@ bool check_representable_as_constant(Checker *c, ExactValue in_value, Type *type } type = core_type(type); - - if (is_type_boolean(type)) { + if (type == t_invalid) { + return false; + } else if (is_type_boolean(type)) { return in_value.kind == ExactValue_Bool; } else if (is_type_string(type)) { return in_value.kind == ExactValue_String; @@ -1485,8 +1486,17 @@ void check_comparison(Checker *c, Operand *x, Operand *y, TokenKind op) { gb_string_free(type_string); } } else { - gbString xt = type_to_string(x->type); - gbString yt = type_to_string(y->type); + gbString xt, yt; + if (x->mode == Addressing_Overload) { + xt = gb_string_make(heap_allocator(), "overloaded procedure"); + } else { + xt = type_to_string(x->type); + } + if (y->mode == Addressing_Overload) { + yt = gb_string_make(heap_allocator(), "overloaded procedure"); + } else { + yt = type_to_string(y->type); + } err_str = gb_string_make(c->tmp_allocator, gb_bprintf("mismatched types `%s` and `%s`", xt, yt)); gb_string_free(yt); diff --git a/src/ir.cpp b/src/ir.cpp index b171c5134..864375250 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -4639,6 +4639,7 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) { case_ast_node(i, Ident, expr); Entity *e = entity_of_ident(proc->module->info, expr); + GB_ASSERT_MSG(e != nullptr, "%s", expr_to_string(expr)); if (e->kind == Entity_Builtin) { Token token = ast_node_token(expr); GB_PANIC("TODO(bill): ir_build_single_expr Entity_Builtin `%.*s`\n" diff --git a/src/types.cpp b/src/types.cpp index 313c75a35..f30e47869 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3,6 +3,7 @@ struct AstNode; enum BasicKind { Basic_Invalid, + Basic_bool, Basic_i8, Basic_u8,