Skip to content

Commit

Permalink
More nits
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Nov 10, 2022
1 parent 43ad19b commit fea8d0e
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
4 changes: 4 additions & 0 deletions compiler/rustc_middle/src/ty/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2506,6 +2506,10 @@ impl<'tcx> TyCtxt<'tcx> {
self.trait_def(trait_def_id).has_auto_impl
}

pub fn trait_is_coinductive(self, trait_def_id: DefId) -> bool {
self.trait_is_auto(trait_def_id) || self.lang_items().sized_trait() == Some(trait_def_id)
}

/// Returns layout of a generator. Layout might be unavailable if the
/// generator is tainted by errors.
pub fn generator_layout(self, def_id: DefId) -> Option<&'tcx GeneratorLayout<'tcx>> {
Expand Down
5 changes: 1 addition & 4 deletions compiler/rustc_trait_selection/src/traits/select/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -959,10 +959,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {

fn coinductive_predicate(&self, predicate: ty::Predicate<'tcx>) -> bool {
let result = match predicate.kind().skip_binder() {
ty::PredicateKind::Trait(ref data) => {
self.tcx().trait_is_auto(data.def_id())
|| self.tcx().lang_items().sized_trait() == Some(data.def_id())
}
ty::PredicateKind::Trait(ref data) => self.tcx().trait_is_coinductive(data.def_id()),
ty::PredicateKind::WellFormed(_) => true,
_ => false,
};
Expand Down
14 changes: 14 additions & 0 deletions src/test/ui/sized/coinductive-1-gat.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// check-pass
struct Node<C: Trait>(C::Assoc::<Self>);

trait Trait {
type Assoc<T>;
}

impl Trait for Vec<()> {
type Assoc<T> = Vec<T>;
}

fn main() {
let _ = Node::<Vec<()>>(Vec::new());
}

0 comments on commit fea8d0e

Please sign in to comment.