diff options
Diffstat (limited to 'compiler/rustc_trait_selection/src/infer.rs')
| -rw-r--r-- | compiler/rustc_trait_selection/src/infer.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler/rustc_trait_selection/src/infer.rs b/compiler/rustc_trait_selection/src/infer.rs index 0f2e22604dc..73e220dc7af 100644 --- a/compiler/rustc_trait_selection/src/infer.rs +++ b/compiler/rustc_trait_selection/src/infer.rs @@ -113,12 +113,20 @@ impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx> { fn type_implements_trait( &self, trait_def_id: DefId, - ty: Ty<'tcx>, + self_ty: Ty<'tcx>, params: SubstsRef<'tcx>, param_env: ty::ParamEnv<'tcx>, ) -> traits::EvaluationResult { - let trait_ref = - ty::TraitRef { def_id: trait_def_id, substs: self.tcx.mk_substs_trait(ty, params) }; + let trait_ref = ty::TraitRef { + def_id: trait_def_id, + substs: self.tcx.mk_substs_trait(self_ty, params), + }; + + debug_assert_eq!( + self.tcx.generics_of(trait_def_id).count() - 1, + params.len(), + "wrong number of generic parameters for {trait_def_id:?}, did you accidentally include the self-type in the params list?" + ); let obligation = traits::Obligation { cause: traits::ObligationCause::dummy(), |
