From 3558848da818dc330d139ff5d756bb9b9498b1d4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 17 Dec 2020 17:36:59 +0000 Subject: Fix ir_print.cpp for typeid constants --- src/ir.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/ir.cpp') diff --git a/src/ir.cpp b/src/ir.cpp index f69b25494..90cce3699 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -1638,6 +1638,7 @@ irValue *ir_check_compound_lit_constant(irModule *m, Ast *expr) { if (expr == nullptr) { return nullptr; } + if (expr->kind == Ast_CompoundLit) { ast_node(cl, CompoundLit, expr); for_array(i, cl->elems) { @@ -1661,6 +1662,7 @@ irValue *ir_check_compound_lit_constant(irModule *m, Ast *expr) { } } + return nullptr; } @@ -6743,7 +6745,10 @@ irValue *ir_type_info(irProcedure *proc, Type *type) { return ir_emit_array_ep(proc, ir_global_type_info_data, ir_const_i32(id)); } -irValue *ir_typeid(irModule *m, Type *type) { +u64 ir_typeid_as_integer(irModule *m, Type *type) { + if (type == nullptr) { + return 0; + } type = default_type(type); u64 id = cast(u64)ir_type_info_index(m->info, type); @@ -6808,8 +6813,11 @@ irValue *ir_typeid(irModule *m, Type *type) { data |= (reserved &~ (1ull<<1)) << 63ull; // kind } + return id; +} - return ir_value_constant(t_typeid, exact_value_u64(data)); +irValue *ir_typeid(irModule *m, Type *type) { + return ir_value_constant(t_typeid, exact_value_u64(ir_typeid_as_integer(m, type))); } -- cgit v1.2.3