diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/trans/codegen_c.cpp | 3 | ||||
-rw-r--r-- | src/trans/enumerate.cpp | 6 |
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); |