Remove predicates on associated types from traits
These need to only be bounds to avoid cycle errors in trait checking.
This commit is contained in:
parent
8787090964
commit
582ccec1c5
10 changed files with 141 additions and 42 deletions
|
@ -391,6 +391,24 @@ rustc_queries! {
|
|||
desc { |tcx| "computing predicates of `{}`", tcx.def_path_str(key) }
|
||||
}
|
||||
|
||||
/// Returns everything that looks like a predicate written explicitly
|
||||
/// by the user on a trait item.
|
||||
///
|
||||
/// Traits are unusual, because predicates on associated types are
|
||||
/// converted into bounds on that type for backwards compatibility:
|
||||
///
|
||||
/// trait X where Self::U: Copy { type U; }
|
||||
///
|
||||
/// becomes
|
||||
///
|
||||
/// trait X { type U: Copy; }
|
||||
///
|
||||
/// `explicit_predicates_of` and `explicit_item_bounds` will then take
|
||||
/// the appropriate subsets of the predicates here.
|
||||
query trait_explicit_predicates_and_bounds(key: LocalDefId) -> ty::GenericPredicates<'tcx> {
|
||||
desc { |tcx| "computing explicit predicates of trait `{}`", tcx.def_path_str(key.to_def_id()) }
|
||||
}
|
||||
|
||||
/// Returns the predicates written explicitly by the user.
|
||||
query explicit_predicates_of(key: DefId) -> ty::GenericPredicates<'tcx> {
|
||||
desc { |tcx| "computing explicit predicates of `{}`", tcx.def_path_str(key) }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue