summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/trans/codegen_c.cpp3
-rw-r--r--src/trans/enumerate.cpp6
2 files changed, 8 insertions, 1 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 073c25ca..ce351a57 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -1844,7 +1844,8 @@ namespace {
#endif
}
else if( name == "type_id" ) {
- emit_lvalue(e.ret_val); m_of << " = (uintptr_t)&__typeid_" << Trans_Mangle(params.m_types.at(0));
+ const auto& ty = params.m_types.at(0);
+ emit_lvalue(e.ret_val); m_of << " = (uintptr_t)&__typeid_" << Trans_Mangle(ty);
}
else if( name == "type_name" ) {
auto s = FMT(params.m_types.at(0));
diff --git a/src/trans/enumerate.cpp b/src/trans/enumerate.cpp
index 272d96f2..b12673b1 100644
--- a/src/trans/enumerate.cpp
+++ b/src/trans/enumerate.cpp
@@ -866,6 +866,12 @@ void Trans_Enumerate_Types(EnumState& state)
(Call,
if( te.fcn.is_Value() )
H::visit_lvalue(tv,pp,fcn, te.fcn.as_Value());
+ else if( te.fcn.is_Intrinsic() )
+ {
+ if( te.fcn.as_Intrinsic().name == "type_id" ) {
+ tv.visit_type(monomorph(te.fcn.as_Intrinsic().params.m_types.at(0)));
+ }
+ }
H::visit_lvalue(tv,pp,fcn, te.ret_val);
for(const auto& arg : te.args)
H::visit_lvalue(tv,pp,fcn, arg);