diff options
Diffstat (limited to 'src/trans/auto_impls.cpp')
-rw-r--r-- | src/trans/auto_impls.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/trans/auto_impls.cpp b/src/trans/auto_impls.cpp index ced322a4..f7f85b23 100644 --- a/src/trans/auto_impls.cpp +++ b/src/trans/auto_impls.cpp @@ -202,7 +202,7 @@ void Trans_AutoImpl_Clone(State& state, ::HIR::TypeRef ty) impl.m_methods.insert(::std::make_pair( RcString::new_interned("clone"), ::HIR::TraitImpl::ImplEnt< ::HIR::Function> { false, ::std::move(fcn) } )); // Add impl to the crate - state.crate.m_trait_impls[state.lang_Clone].push_back( ::std::move(impl) ); + state.crate.m_trait_impls[state.lang_Clone].get_list_for_type_mut(impl.m_type).push_back( ::std::move(impl) ); } void Trans_AutoImpls(::HIR::Crate& crate, TransList& trans_list) @@ -237,7 +237,9 @@ void Trans_AutoImpls(::HIR::Crate& crate, TransList& trans_list) //DEBUG("add_function(" << p << ")"); auto e = trans_list.add_function(::std::move(p)); - auto it = ::std::find_if( impl_list_it->second.begin(), impl_list_it->second.end(), [&](const auto& i){ return i.m_type == ty; }); + const auto* impl_list = impl_list_it->second.get_list_for_type(ty); + assert(impl_list); + auto it = ::std::find_if( impl_list->begin(), impl_list->end(), [&](const auto& i){ return i.m_type == ty; }); assert( it->m_methods.size() == 1 ); e->ptr = &it->m_methods.begin()->second.data; } |