From e00d88d82efc5f3400b158a5f601ea6c73214442 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 30 Nov 2017 19:53:40 +0000 Subject: [PATCH] Fix issue #157 --- src/check_expr.cpp | 2 ++ src/check_stmt.cpp | 8 ++++++-- src/ir.cpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b65f760a7..59151fb12 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -623,6 +623,7 @@ void check_assignment(Checker *c, Operand *operand, Type *type, String context_n if (operand->mode == Addressing_Invalid) { return; } + #if 0 if (operand->mode == Addressing_Type) { Type *t = base_type(type); @@ -665,6 +666,7 @@ void check_assignment(Checker *c, Operand *operand, Type *type, String context_n } } + if (type == nullptr) { return; } diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 2cdeaf7e8..98798b75d 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -178,8 +178,12 @@ bool check_is_terminating(AstNode *node) { } Type *check_assignment_variable(Checker *c, Operand *lhs, Operand *rhs) { - if (rhs->mode == Addressing_Invalid || - (rhs->type == t_invalid && rhs->mode != Addressing_Overload)) { + if (rhs->mode == Addressing_Invalid) { + return nullptr; + } + if (rhs->type == t_invalid && + rhs->mode != Addressing_Overload && + rhs->mode != Addressing_Builtin) { return nullptr; } diff --git a/src/ir.cpp b/src/ir.cpp index 1b2705d04..6f23b0bc0 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -4828,7 +4828,7 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *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" + GB_PANIC("TODO(bill): ir_build_expr Entity_Builtin '%.*s'\n" "\t at %.*s(%td:%td)", LIT(builtin_procs[e->Builtin.id].name), LIT(token.pos.file), token.pos.line, token.pos.column); return nullptr;