]> git.lizzy.rs Git - rust.git/blobdiff - compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs
Auto merge of #105646 - lqd:revert-thinlto, r=Mark-Simulacrum
[rust.git] / compiler / rustc_trait_selection / src / traits / error_reporting / suggestions.rs
index df470f62089101ebedce4f4c7e7fe5924f8ffe5b..40c8102547112956468b8c18f39e5dc2ce9a85b3 100644 (file)
@@ -3133,18 +3133,21 @@ fn function_argument_obligation(
             if let ObligationCauseCode::ExprBindingObligation(def_id, _, _, idx) = parent_code.deref()
                 && let predicates = self.tcx.predicates_of(def_id).instantiate_identity(self.tcx)
                 && let Some(pred) = predicates.predicates.get(*idx)
-                && let ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) = pred.kind().skip_binder()
+                && let Ok(trait_pred) = pred.kind().try_map_bound(|pred| match pred {
+                    ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) => Ok(trait_pred),
+                    _ => Err(()),
+                })
             {
                 let mut c = CollectAllMismatches {
                     infcx: self.infcx,
                     param_env,
                     errors: vec![],
                 };
-                if let ty::PredicateKind::Clause(ty::Clause::Trait(
-                        predicate
-                    )) = predicate.kind().skip_binder()
-                {
-                    if let Ok(_) = c.relate(trait_pred, predicate) {
+                if let Ok(trait_predicate) = predicate.kind().try_map_bound(|pred| match pred {
+                    ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) => Ok(trait_pred),
+                    _ => Err(()),
+                }) {
+                    if let Ok(_) = c.relate(trait_pred, trait_predicate) {
                         type_diffs = c.errors;
                     }
                 }