diff options
-rw-r--r-- | src/mir/cleanup.cpp | 2 | ||||
-rw-r--r-- | src/mir/helpers.cpp | 4 | ||||
-rw-r--r-- | src/trans/codegen_c.cpp | 3 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/mir/cleanup.cpp b/src/mir/cleanup.cpp index a0d9e0fb..fb22a5dc 100644 --- a/src/mir/cleanup.cpp +++ b/src/mir/cleanup.cpp @@ -61,7 +61,7 @@ const ::HIR::Literal* MIR_Cleanup_GetConstant(const Span& sp, const StaticTraitR unsigned int vtable_idx = it->second.first; // 2. Load from the vtable - auto vtable_ty_spath = pe.trait.m_path; + auto vtable_ty_spath = te.m_trait.m_path.m_path; vtable_ty_spath.m_components.back() += "#vtable"; const auto& vtable_ref = state.m_resolve.m_crate.get_struct_by_path(sp, vtable_ty_spath); // Copy the param set from the trait in the trait object diff --git a/src/mir/helpers.cpp b/src/mir/helpers.cpp index e0721549..ba4f4ca1 100644 --- a/src/mir/helpers.cpp +++ b/src/mir/helpers.cpp @@ -85,7 +85,7 @@ const ::HIR::TypeRef& ::MIR::TypeResolve::get_lvalue_type(::HIR::TypeRef& tmp, c MIR_BUG(*this, "Field on unit-like struct - " << ty); ), (Tuple, - MIR_ASSERT(*this, e.field_index < se.size(), "Field index out of range in tuple-struct"); + MIR_ASSERT(*this, e.field_index < se.size(), "Field index out of range in tuple-struct " << te.path); const auto& fld = se[e.field_index]; if( monomorphise_type_needed(fld.ent) ) { tmp = monomorphise_type(sp, str.m_params, te.path.m_data.as_Generic().m_params, fld.ent); @@ -97,7 +97,7 @@ const ::HIR::TypeRef& ::MIR::TypeResolve::get_lvalue_type(::HIR::TypeRef& tmp, c } ), (Named, - MIR_ASSERT(*this, e.field_index < se.size(), "Field index out of range in struct"); + MIR_ASSERT(*this, e.field_index < se.size(), "Field index out of range in struct " << te.path); const auto& fld = se[e.field_index].second; if( monomorphise_type_needed(fld.ent) ) { tmp = monomorphise_type(sp, str.m_params, te.path.m_data.as_Generic().m_params, fld.ent); diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 83f8b10b..889565c4 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -306,6 +306,7 @@ namespace { for(const auto& stmt : code->blocks[i].statements) { + mir_res.set_cur_stmt(i, (&stmt - &code->blocks[i].statements.front())); assert( stmt.is_Drop() || stmt.is_Assign() ); if( stmt.is_Drop() ) { // TODO: Emit destructor calls @@ -561,6 +562,8 @@ namespace { m_of << "\n"; } } + + mir_res.set_cur_stmt_term(i); TU_MATCHA( (code->blocks[i].terminator), (e), (Incomplete, m_of << "\tfor(;;);\n"; |