]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_infer/traits/util.rs
fix elaborate for predicates with unbound variables
[rust.git] / src / librustc_infer / traits / util.rs
index 1bee16f7556a18bca771c15ca01c8839c112e1c6..6aeb225a6e9cbf7a789274bf6d495b6367dac3dc 100644 (file)
@@ -151,15 +151,11 @@ pub fn filter_to_traits(self) -> FilterToTraits<'tcx, Self> {
 
     fn elaborate(&mut self, obligation: &PredicateObligation<'tcx>) {
         let tcx = self.visited.tcx;
-        let pred = match obligation.predicate.kind() {
-            // We have to be careful and rebind this when
-            // dealing with a predicate further down.
-            ty::PredicateKind::ForAll(binder) => binder.skip_binder().kind(),
-            pred => pred,
-        };
-
-        match pred {
-            ty::PredicateKind::ForAll(_) => bug!("unexpected predicate: {:?}", pred),
+
+        match obligation.predicate.ignore_qualifiers(tcx).skip_binder().kind() {
+            ty::PredicateKind::ForAll(_) => {
+                bug!("unexpected predicate: {:?}", obligation.predicate)
+            }
             ty::PredicateKind::Trait(data, _) => {
                 // Get predicates declared on the trait.
                 let predicates = tcx.super_predicates_of(data.def_id());