Closed
Description
foo.rs
:
#![feature(specialization)]
trait Foo: Sized {
type Bar: From<Self>;
}
impl Foo for i32 {
default type Bar = ();
}
fn xyz<T: Foo>(t: T) -> T::Bar {
t.into()
}
fn main() {
xyz(5i32);
}
> rustc --version
rustc 1.10.0-nightly (2174bd97c 2016-04-14)
> RUST_BACKTRACE=1 rustc foo.rs
error: internal compiler error: ../src/librustc/infer/mod.rs:544: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<() as std::convert::From<i32>>)),depth=1),Unimplemented)]` fulfilling during trans
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Box<Any>', ../src/libsyntax/errors/mod.rs:536
stack backtrace:
1: 0x7f075adfc600 - std::sys::backtrace::tracing::imp::write::h9fb600083204ae7f
2: 0x7f075ae09d4b - std::panicking::default_hook::_$u7b$$u7b$closure$u7d$$u7d$::hca543c34f11229ac
3: 0x7f075ae098ec - std::panicking::default_hook::hc2c969e7453d080c
4: 0x7f075adce8bf - std::sys_common::unwind::begin_unwind_inner::h30e12d15ce2b2e25
5: 0x7f0759d28008 - std::sys_common::unwind::begin_unwind::h24c4c0fa2cfe995a
6: 0x7f0759d27fab - syntax::errors::Handler::span_bug::h1c6b996df38ae8d7
7: 0x7f0759d5c152 - rustc::session::opt_span_bug_fmt::_$u7b$$u7b$closure$u7d$$u7d$::hf0fb5697f8f25f40
8: 0x7f0759d5c042 - rustc::session::span_bug_fmt::h4591bcbadfc38558
9: 0x7f0759d6ffb3 - rustc_trans::common::fulfill_obligation::hb97500cd4d49823c
10: 0x7f0759e6dc39 - _<collector..MirNeighborCollector<'a, 'tcx> as rustc..mir..visit..Visitor<'tcx>>::visit_operand::hc9aaa9442e0c17d2
11: 0x7f0759e695f6 - rustc_trans::collector::collect_items_rec::hd5e212e77fc53d1a
12: 0x7f0759e697ad - rustc_trans::collector::collect_items_rec::hd5e212e77fc53d1a
13: 0x7f0759dabc86 - rustc_trans::base::collect_translation_items::_$u7b$$u7b$closure$u7d$$u7d$::h33d9d5954414c1ad
14: 0x7f0759d99510 - rustc_trans::base::trans_crate::h6ed1dbd6e572a8c2
15: 0x7f075b36215f - rustc_driver::driver::phase_4_translate_to_llvm::hd7579aae98641824
16: 0x7f075b36081f - rustc_driver::driver::compile_input::_$u7b$$u7b$closure$u7d$$u7d$::h5534474dbe9371c4
17: 0x7f075b35d190 - rustc_driver::driver::phase_3_run_analysis_passes::_$u7b$$u7b$closure$u7d$$u7d$::h5a042a091cd7658c
18: 0x7f075b356c6b - rustc::ty::context::TyCtxt::create_and_enter::h3f9051bcccbd93e4
19: 0x7f075b35371e - rustc_driver::driver::phase_3_run_analysis_passes::h9c723484c588a35b
20: 0x7f075b325f7f - rustc_driver::driver::compile_input::h0629572e6f316b31
21: 0x7f075b30c4e4 - rustc_driver::run_compiler::h8902aebf8b1849a8
22: 0x7f075b309941 - std::sys_common::unwind::try::try_fn::h4c74456035d0fcc7
23: 0x7f075adf9d9b - __rust_try
24: 0x7f075adf9d2d - std::sys_common::unwind::inner_try::h47a4d9cd4a369dcd
25: 0x7f075b30a18a - _<F as std..boxed..FnBox<A>>::call_box::h27f542a39f1d61ef
26: 0x7f075ae07ee4 - std::sys::thread::Thread::new::thread_start::h6f266e069bf4ec2b
27: 0x7f0752c606a9 - start_thread
28: 0x7f075aa5ce9c - clone
29: 0x0 - <unknown>
Metadata
Metadata
Assignees
Labels
Area: Associated items (types, constants & functions)Area: Trait impl specializationCategory: This is a bug.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.`#![feature(specialization)]`Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessMedium priorityRelevant to the compiler team, which will review and decide on the PR/issue.This issue requires a nightly compiler in some way.
Activity
[-]Trait bounds not checked on specializable assocated types[/-][+]Trait bounds not checked on specializable associated types[/+]apasel422 commentedon Aug 14, 2016
Triage: still an issue.
dtolnay commentedon Nov 28, 2016
I just hit this, though the error is a bit different now: "resolving bounds after type-checking" rather than "fulfilling during trans".
strega-nil commentedon Dec 16, 2016
ping @arielb1 how is this unsound?
bstrie commentedon Jun 20, 2017
Given that @arielb1 has seen fit to tag this as a soundness bug I'm nominating it so that it can receive a priority assessment, though I'll second ubsan in asking for a demonstration of the unsoundness here.
nikomatsakis commentedon Jun 29, 2017
In general, having trait bounds that are not checked can lead to unsoundness, since some part of the code will assume that they hold when in fact they do not (consider, e.g., what might happen if the bound were
Send
).nikomatsakis commentedon Jul 6, 2017
I'm going to mark this as P-medium and tag it from the specialization issue (it is specific to specialization, right?)
25 remaining items