Closed
Description
I'm trying to update rust-lang/rust to the latest smallvec (0.6.7 ➙ 0.6.9), and an running into an issue where rustc fails to compile:
error: internal compiler error: src/librustc/ty/relate.rs:773: impossible case reached: can't relate: '_#0r with Type(RustaceansAreAwesome)
I have narrowed down the change that breaks this to servo/rust-smallvec#137.
I don't know anything about smallvec and very little about rustc, so if anyone can help figure out what's wrong, I'd appreciate it. I'll keep digging a little, but it is unlikely that I'll be able to do more. This can be reproduced with cargo update -p smallvec; ./x.py build
(on master, acda261).
backtrace
thread 'rustc' panicked at 'Box', src/librustc_errors/lib.rs:637:9 stack backtrace: 0: backtrace::backtrace::libunwind::trace at /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.25/src/backtrace/libunwind.rs:97 1: backtrace::backtrace::trace_unsynchronized at /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.25/src/backtrace/mod.rs:66 2: std::sys_common::backtrace::_print at src/libstd/sys_common/backtrace.rs:47 3: std::sys_common::backtrace::print at src/libstd/sys_common/backtrace.rs:36 4: std::panicking::default_hook::{{closure}} at src/libstd/panicking.rs:197 5: std::panicking::default_hook at src/libstd/panicking.rs:211 6: as core::ops::function::Fn>::call at ./src/liballoc/boxed.rs:760 7: rustc::util::common::panic_hook at src/librustc/util/common.rs:40 8: std::panicking::rust_panic_with_hook at src/libstd/panicking.rs:478 9: std::panicking::begin_panic at ./src/libstd/panicking.rs:408 10: rustc_errors::Handler::bug at src/librustc_errors/lib.rs:637 11: rustc::util::bug::opt_span_bug_fmt::{{closure}} at src/librustc/util/bug.rs:36 12: rustc::ty::context::tls::with_opt::{{closure}} at src/librustc/ty/context.rs:2079 13: rustc::ty::context::tls::with_context_opt at src/librustc/ty/context.rs:2014 14: rustc::ty::context::tls::with_opt at src/librustc/ty/context.rs:2079 15: rustc::util::bug::opt_span_bug_fmt at src/librustc/util/bug.rs:32 16: rustc::util::bug::bug_fmt at src/librustc/util/bug.rs:12 17: ::relate at src/librustc/ty/relate.rs:773 18: rustc::ty::relate::TypeRelation::relate at src/librustc/ty/relate.rs:43 19: ::relate_with_variance at src/librustc/infer/sub.rs:59 20: rustc::ty::relate::relate_substs::{{closure}} at src/librustc/ty/relate.rs:141 21: core::ops::function::impls:: for &mut F>::call_once at ./src/libcore/ops/function.rs:279 22: core::option::Option::map at ./src/libcore/option.rs:416 23: as core::iter::traits::iterator::Iterator>::next at ./src/libcore/iter/adapters/mod.rs:570 24: < as core::iter::traits::collect::FromIterator>>::from_iter::Adapter as core::iter::traits::iterator::Iterator>::next at ./src/libcore/result.rs:1250 25: <&mut I as core::iter::traits::iterator::Iterator>::next at ./src/libcore/iter/traits/iterator.rs:2608 26: as core::iter::traits::collect::Extend<::Item>>::extend at /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-0.6.9/lib.rs:1363 27: as core::iter::traits::collect::FromIterator<::Item>>::from_iter at /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-0.6.9/lib.rs:1339 28: as core::iter::traits::collect::FromIterator>>::from_iter at ./src/libcore/result.rs:1267 29: core::iter::traits::iterator::Iterator::collect at ./src/libcore/iter/traits/iterator.rs:1466 30: as rustc::ty::context::InternIteratorElement>::intern_with at src/librustc/ty/context.rs:3002 31: >::intern_with at src/librustc/ty/context.rs:2974 32: rustc::ty::context::TyCtxt::mk_substs at src/librustc/ty/context.rs:2831 33: rustc::ty::relate::relate_substs at src/librustc/ty/relate.rs:144 34: ::relate at src/librustc/ty/relate.rs:293 35: rustc::ty::relate::TypeRelation::relate at src/librustc/ty/relate.rs:43 36: rustc::infer::higher_ranked::::higher_ranked_sub::{{closure}} at src/librustc/infer/higher_ranked/mod.rs:51 37: rustc::infer::InferCtxt::commit_if_ok at src/librustc/infer/mod.rs:810 38: rustc::infer::higher_ranked::::higher_ranked_sub at src/librustc/infer/higher_ranked/mod.rs:34 39: ::binders at src/librustc/infer/sub.rs:184 40: as rustc::ty::relate::Relate>::relate at src/librustc/ty/relate.rs:723 41: rustc::ty::relate::TypeRelation::relate at src/librustc/ty/relate.rs:43 42: rustc::infer::at::Trace::sub::{{closure}} at src/librustc/infer/at.rs:227 43: rustc::infer::InferCtxt::commit_if_ok at src/librustc/infer/mod.rs:810 44: rustc::infer::at::Trace::sub at src/librustc/infer/at.rs:225 45: rustc::infer::at::At::sub_exp at src/librustc/infer/at.rs:90 46: rustc::infer::at::At::sup at src/librustc/infer/at.rs:103 47: rustc::traits::select::SelectionContext::match_poly_trait_ref at src/librustc/traits/select.rs:3712 48: rustc::traits::select::SelectionContext::match_where_clause_trait_ref at src/librustc/traits/select.rs:3697 49: rustc::traits::select::SelectionContext::evaluate_where_clause::{{closure}} at src/librustc/traits/select.rs:1876 50: rustc::traits::select::SelectionContext::evaluation_probe::{{closure}} at src/librustc/traits/select.rs:674 51: rustc::infer::InferCtxt::probe at src/librustc/infer/mod.rs:842 52: rustc::traits::select::SelectionContext::evaluation_probe at src/librustc/traits/select.rs:673 53: rustc::traits::select::SelectionContext::evaluate_where_clause at src/librustc/traits/select.rs:1875 54: rustc::traits::select::SelectionContext::assemble_candidates_from_caller_bounds at src/librustc/traits/select.rs:1859 55: rustc::traits::select::SelectionContext::assemble_candidates at src/librustc/traits/select.rs:1692 56: rustc::traits::select::SelectionContext::candidate_from_obligation_no_cache at src/librustc/traits/select.rs:1339 57: rustc::traits::select::SelectionContext::candidate_from_obligation::{{closure}} at src/librustc/traits/select.rs:1226 58: rustc::traits::select::SelectionContext::in_task::{{closure}} at src/librustc/traits/select.rs:1247 59: rustc::dep_graph::graph::DepGraph::with_anon_task at src/librustc/dep_graph/graph.rs:370 60: rustc::traits::select::SelectionContext::in_task at src/librustc/traits/select.rs:1245 61: rustc::traits::select::SelectionContext::candidate_from_obligation at src/librustc/traits/select.rs:1226 62: rustc::traits::select::SelectionContext::evaluate_stack at src/librustc/traits/select.rs:1023 63: rustc::traits::select::SelectionContext::evaluate_trait_predicate_recursively::{{closure}} at src/librustc/traits/select.rs:871 64: rustc::traits::select::SelectionContext::in_task::{{closure}} at src/librustc/traits/select.rs:1247 65: rustc::dep_graph::graph::DepGraph::with_anon_task at src/librustc/dep_graph/graph.rs:370 66: rustc::traits::select::SelectionContext::in_task at src/librustc/traits/select.rs:1245 67: rustc::traits::select::SelectionContext::evaluate_trait_predicate_recursively at src/librustc/traits/select.rs:871 68: rustc::traits::select::SelectionContext::evaluate_predicate_recursively at src/librustc/traits/select.rs:733 69: rustc::traits::select::SelectionContext::evaluate_predicates_recursively at src/librustc/traits/select.rs:696 70: rustc::traits::select::SelectionContext::evaluate_candidate::{{closure}} at src/librustc/traits/select.rs:1071 71: rustc::traits::select::SelectionContext::evaluation_probe::{{closure}} at src/librustc/traits/select.rs:674 72: rustc::infer::InferCtxt::probe at src/librustc/infer/mod.rs:842 73: rustc::traits::select::SelectionContext::evaluation_probe at src/librustc/traits/select.rs:673 74: rustc::traits::select::SelectionContext::evaluate_candidate at src/librustc/traits/select.rs:1068 75: rustc::traits::select::SelectionContext::evaluate_stack at src/librustc/traits/select.rs:1024 76: rustc::traits::select::SelectionContext::evaluate_trait_predicate_recursively::{{closure}} at src/librustc/traits/select.rs:871 77: rustc::traits::select::SelectionContext::in_task::{{closure}} at src/librustc/traits/select.rs:1247 78: rustc::dep_graph::graph::DepGraph::with_anon_task at src/librustc/dep_graph/graph.rs:370 79: rustc::traits::select::SelectionContext::in_task at src/librustc/traits/select.rs:1245 80: rustc::traits::select::SelectionContext::evaluate_trait_predicate_recursively at src/librustc/traits/select.rs:871 81: rustc::traits::select::SelectionContext::evaluate_predicate_recursively at src/librustc/traits/select.rs:733 82: rustc::traits::select::SelectionContext::evaluate_obligation_recursively::{{closure}} at src/librustc/traits/select.rs:664 83: rustc::traits::select::SelectionContext::evaluation_probe::{{closure}} at src/librustc/traits/select.rs:674 84: rustc::infer::InferCtxt::probe at src/librustc/infer/mod.rs:842 85: rustc::traits::select::SelectionContext::evaluation_probe at src/librustc/traits/select.rs:673 86: rustc::traits::select::SelectionContext::evaluate_obligation_recursively at src/librustc/traits/select.rs:663 87: rustc_traits::evaluate_obligation::evaluate_obligation::{{closure}} at src/librustc_traits/evaluate_obligation.rs:32 88: rustc::infer::InferCtxtBuilder::enter_with_canonical::{{closure}} at ./src/librustc/infer/mod.rs:509 89: rustc::infer::InferCtxtBuilder::enter::{{closure}} at ./src/librustc/infer/mod.rs:520 90: rustc::ty::context::GlobalCtxt::enter_local::{{closure}}::{{closure}} at ./src/librustc/ty/context.rs:1703 91: rustc::ty::context::tls::enter_context::{{closure}} at ./src/librustc/ty/context.rs:1935 92: rustc::ty::context::tls::set_tlv at ./src/librustc/ty/context.rs:1868 93: rustc::ty::context::tls::enter_context at ./src/librustc/ty/context.rs:1934 94: rustc::ty::context::GlobalCtxt::enter_local::{{closure}} at ./src/librustc/ty/context.rs:1702 95: rustc::ty::context::tls::with_related_context::{{closure}} at ./src/librustc/ty/context.rs:2040 96: rustc::ty::context::tls::with_context::{{closure}} at ./src/librustc/ty/context.rs:2024 97: rustc::ty::context::tls::with_context_opt at ./src/librustc/ty/context.rs:2014 98: rustc::ty::context::tls::with_context at ./src/librustc/ty/context.rs:2024 99: rustc::ty::context::tls::with_related_context at ./src/librustc/ty/context.rs:2036 100: rustc::ty::context::GlobalCtxt::enter_local at ./src/librustc/ty/context.rs:1694