error: internal compiler error: src/librustc/traits/codegen/mod.rs:154: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::Fn<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>)), depth=2),OutputTypeParameterMismatch(Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::Fn<(&mut mozaic::messaging::reactor::LinkHandle<'_, '_, mozaic::server::runtime::Runtime>, >::Reader)>>), Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::Fn<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>), Sorts(ExpectedFound { expected: mozaic::client_capnp::host_message::Reader<'_>, found: >::Reader }))), FulfillmentError(Obligation(predicate=Binder(TraitPredicate( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::Fn<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>)), depth=2),OutputTypeParameterMismatch(Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::Fn<(&mut mozaic::messaging::reactor::LinkHandle<'_, '_, mozaic::server::runtime::Runtime>, >::Reader)>>), Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::Fn<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>), Sorts(ExpectedFound { expected: mozaic::client_capnp::host_message::Reader<'_>, found: >::Reader }))), FulfillmentError(Obligation(predicate=Binder(TraitPredicate( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::FnOnce<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>)), depth=2),OutputTypeParameterMismatch(Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::FnOnce<(&mut mozaic::messaging::reactor::LinkHandle<'_, '_, mozaic::server::runtime::Runtime>, >::Reader)>>), Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::FnOnce<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>), Sorts(ExpectedFound { expected: mozaic::client_capnp::host_message::Reader<'_>, found: >::Reader }))), FulfillmentError(Obligation(predicate=Binder(TraitPredicate( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::FnOnce<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>)), depth=2),OutputTypeParameterMismatch(Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::FnOnce<(&mut mozaic::messaging::reactor::LinkHandle<'_, '_, mozaic::server::runtime::Runtime>, >::Reader)>>), Binder( fn(&'r mut mozaic::messaging::reactor::LinkHandle<'s, 't0, mozaic::server::runtime::Runtime>, >::Reader) -> std::result::Result<(), mozaic::errors::Error> {mozaic::messaging::reactor::e_to_i::} as std::ops::FnOnce<(&mut mozaic::messaging::reactor::LinkHandle, mozaic::client_capnp::host_message::Reader<'_>)>>), Sorts(ExpectedFound { expected: mozaic::client_capnp::host_message::Reader<'_>, found: >::Reader })))]` resolving bounds after type-checking
When trying to use generic function with capnproto structs the compiler fails to infer types correctly.
I failed to distil the problem to a smaller size.
Capnproto generates code that implements traits like this
impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; }Error
Which I think can be distilled down to
expected: host_message::Reader<'_>, found: <host_message::Owned as Owned<'_>>::Readerwhich is the same type.Meta
rustc --version --verbose:rustc 1.37.0 (eae3437df 2019-08-13) binary: rustc commit-hash: eae3437dfe991621e8afdc82734f4a172d7ddf9b commit-date: 2019-08-13 host: x86_64-unknown-linux-gnu release: 1.37.0 LLVM version: 8.0My first issue btw, sorry for noobyness.