Closed
Description
STR
trait Foo { type Assoc: PartialEq<Box<Self>>; }
impl Foo for u32 { type Assoc = Box<u32>; }
fn foo<T: Foo+?Sized>(u: Box<T>, v: T::Assoc) -> bool {
&v == &u
}
fn main() {
let bar: Box<Foo<Assoc=Box<u32>>> = Box::new(4);
foo(bar, Box::new(5));
}
Result
<anon>:5:5: 5:13 error: internal compiler error: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<Box<u32> as core::cmp::PartialEq<Box<Foo<Assoc=Box<u32>> + 'static>>>)),depth=1),Unimplemented)]` fulfilling during trans
I guess this should be banned.
Metadata
Metadata
Assignees
Labels
Area: Trait systemArea: Type systemCategory: This is a bug.Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessHigh priorityRelevant to the compiler team, which will review and decide on the PR/issue.
Activity
arielb1 commentedon Aug 11, 2015
Related:
nikomatsakis commentedon Aug 11, 2015
Interesting. I agree that it should be illegal and we should amend WF relations for object types to check that the bindings cover the requirements of the trait -- the RFC was incomplete on this topic.
where Option<Self>: Sized
#25204pnkfelix commentedon Jan 21, 2016
The example from the first comment (#27675 (comment)) is actually scarier than the original bug description; at least, I usually can think "oh, an ICE, well that might just be something that won't actually ever compile"; but the first comment is showing code that is indeed a case of "wat"!
[-]object-safe traits can have associated types with Self-containing bounds[/-][+]object-safe traits can have associated types with unchecked bounds[/+]pnkfelix commentedon Jul 7, 2016
triage: P-medium
36 remaining items