From 11c7b6a2e495ff300ea2b200d531dafae3486f90 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 11 Jan 2020 20:26:36 +0000 Subject: [PATCH] Fix len of type bug --- src/check_expr.cpp | 3 +++ src/ir.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index ac6f22e6d..f23c47a2e 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4021,6 +4021,9 @@ bool check_builtin_procedure(CheckerContext *c, Operand *operand, Ast *call, i32 mode = Addressing_Value; } } + if (operand->mode == Addressing_Type && mode != Addressing_Constant) { + mode = Addressing_Invalid; + } if (mode == Addressing_Invalid) { gbString t = type_to_string(operand->type); diff --git a/src/ir.cpp b/src/ir.cpp index 501332347..5af0e278c 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -6231,6 +6231,7 @@ irValue *ir_gen_anonymous_proc_lit(irModule *m, String prefix_name, Ast *expr, i String name = make_string(name_text, name_len-1); Type *type = type_of_expr(expr); + set_procedure_abi_types(heap_allocator(), type); irValue *value = ir_value_procedure(m, nullptr, type, pl->type, pl->body, name); value->Proc.tags = pl->tags; @@ -8934,7 +8935,7 @@ void ir_build_nested_proc(irProcedure *proc, AstProcLit *pd, Entity *e) { name_len = gb_snprintf(cast(char *)name_text, name_len, "%.*s.%.*s-%d", LIT(proc->name), LIT(pd_name), guid); String name = make_string(name_text, name_len-1); - + set_procedure_abi_types(heap_allocator(), e->type); irValue *value = ir_value_procedure(proc->module, e, e->type, pd->type, pd->body, name); value->Proc.tags = pd->tags; @@ -9033,7 +9034,7 @@ void ir_build_constant_value_decl(irProcedure *proc, AstValueDecl *vd) { return; } - + set_procedure_abi_types(heap_allocator(), e->type); irValue *value = ir_value_procedure(proc->module, e, e->type, pl->type, pl->body, name); value->Proc.tags = pl->tags; @@ -11840,6 +11841,7 @@ void ir_gen_tree(irGen *s) { Ast *type_expr = pl->type; + set_procedure_abi_types(heap_allocator(), e->type); irValue *p = ir_value_procedure(m, e, e->type, type_expr, body, name); p->Proc.tags = pl->tags; p->Proc.inlining = pl->inlining;