Prefer lower TraitUpcasting candidates
This commit is contained in:
parent
2ae9916816
commit
bf545ce2fe
6 changed files with 54 additions and 6 deletions
|
@ -1895,6 +1895,18 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
|
|||
Some(None) => {}
|
||||
None => return None,
|
||||
}
|
||||
// Same for upcasting.
|
||||
let upcast_bound = candidates
|
||||
.iter()
|
||||
.filter_map(|c| {
|
||||
if let TraitUpcastingUnsizeCandidate(i) = c.candidate { Some(i) } else { None }
|
||||
})
|
||||
.try_reduce(|c1, c2| if has_non_region_infer { None } else { Some(c1.min(c2)) });
|
||||
match upcast_bound {
|
||||
Some(Some(index)) => return Some(TraitUpcastingUnsizeCandidate(index)),
|
||||
Some(None) => {}
|
||||
None => return None,
|
||||
}
|
||||
|
||||
// Finally, handle overlapping user-written impls.
|
||||
let impls = candidates.iter().filter_map(|c| {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue