diff options
| author | Michael Goulet <michael@errs.io> | 2025-08-14 14:58:40 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2025-08-14 15:06:18 +0000 |
| commit | 2f85c80f9cb3c2e34904dd1d5ff80ed6f4cd6264 (patch) | |
| tree | bb33ef33c68c079b441205cf4ae1e78d5575bb27 | |
| parent | 96ecc9042cbda2be93f969f2b8dc676964ec8f2c (diff) | |
| download | rust-2f85c80f9cb3c2e34904dd1d5ff80ed6f4cd6264.tar.gz rust-2f85c80f9cb3c2e34904dd1d5ff80ed6f4cd6264.zip | |
Revert "Use DeepRejectCtxt in assemble_inherent_candidates_from_param"
This reverts commit ad59f0b6e6e5c45ea64064758a88e8521259bfcf.
4 files changed, 12 insertions, 58 deletions
diff --git a/compiler/rustc_hir_typeck/src/lib.rs b/compiler/rustc_hir_typeck/src/lib.rs index aae870f7ee3..924779f8dc0 100644 --- a/compiler/rustc_hir_typeck/src/lib.rs +++ b/compiler/rustc_hir_typeck/src/lib.rs @@ -1,7 +1,6 @@ // tidy-alphabetical-start #![allow(rustc::diagnostic_outside_of_impl)] #![allow(rustc::untranslatable_diagnostic)] -#![feature(assert_matches)] #![feature(box_patterns)] #![feature(if_let_guard)] #![feature(iter_intersperse)] diff --git a/compiler/rustc_hir_typeck/src/method/probe.rs b/compiler/rustc_hir_typeck/src/method/probe.rs index 1f3969bd93c..fbbd6e9957f 100644 --- a/compiler/rustc_hir_typeck/src/method/probe.rs +++ b/compiler/rustc_hir_typeck/src/method/probe.rs @@ -1,4 +1,3 @@ -use std::assert_matches::debug_assert_matches; use std::cell::{Cell, RefCell}; use std::cmp::max; use std::ops::Deref; @@ -16,7 +15,7 @@ use rustc_infer::infer::{BoundRegionConversionTime, DefineOpaqueTypes, InferOk, use rustc_infer::traits::ObligationCauseCode; use rustc_middle::middle::stability; use rustc_middle::ty::elaborate::supertrait_def_ids; -use rustc_middle::ty::fast_reject::{DeepRejectCtxt, TreatParams, simplify_type}; +use rustc_middle::ty::fast_reject::{TreatParams, simplify_type}; use rustc_middle::ty::{ self, AssocItem, AssocItemContainer, GenericArgs, GenericArgsRef, GenericParamDefKind, ParamEnvAnd, Ty, TyCtxt, TypeVisitableExt, Upcast, @@ -803,8 +802,8 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> { ); } } - ty::Param(_) => { - self.assemble_inherent_candidates_from_param(raw_self_ty); + ty::Param(p) => { + self.assemble_inherent_candidates_from_param(p); } ty::Bool | ty::Char @@ -905,16 +904,18 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> { } #[instrument(level = "debug", skip(self))] - fn assemble_inherent_candidates_from_param(&mut self, param_ty: Ty<'tcx>) { - debug_assert_matches!(param_ty.kind(), ty::Param(_)); - - let tcx = self.tcx; + fn assemble_inherent_candidates_from_param(&mut self, param_ty: ty::ParamTy) { let bounds = self.param_env.caller_bounds().iter().filter_map(|predicate| { let bound_predicate = predicate.kind(); match bound_predicate.skip_binder() { - ty::ClauseKind::Trait(trait_predicate) => DeepRejectCtxt::relate_rigid_rigid(tcx) - .types_may_unify(param_ty, trait_predicate.trait_ref.self_ty()) - .then(|| bound_predicate.rebind(trait_predicate.trait_ref)), + ty::ClauseKind::Trait(trait_predicate) => { + match *trait_predicate.trait_ref.self_ty().kind() { + ty::Param(p) if p == param_ty => { + Some(bound_predicate.rebind(trait_predicate.trait_ref)) + } + _ => None, + } + } ty::ClauseKind::RegionOutlives(_) | ty::ClauseKind::TypeOutlives(_) | ty::ClauseKind::Projection(_) diff --git a/tests/ui/traits/next-solver/method/param-method-from-unnormalized-param-env-2.rs b/tests/ui/traits/next-solver/method/param-method-from-unnormalized-param-env-2.rs deleted file mode 100644 index ffb99d6d638..00000000000 --- a/tests/ui/traits/next-solver/method/param-method-from-unnormalized-param-env-2.rs +++ /dev/null @@ -1,29 +0,0 @@ -//@ check-pass -//@ revisions: current next -//@ ignore-compare-mode-next-solver (explicit revisions) -//@[next] compile-flags: -Znext-solver - -// Regression test for <https://github.com/rust-lang/trait-system-refactor-initiative/issues/214>. -// See comment below. - -trait A { - fn hello(&self) {} -} - -trait B { - fn hello(&self) {} -} - -impl<T> A for T {} -impl<T> B for T {} - -fn test<F, R>(q: F::Item) -where - F: Iterator<Item = R>, - // We want to prefer `A` for `R.hello()` - F::Item: A, -{ - q.hello(); -} - -fn main() {} diff --git a/tests/ui/traits/next-solver/method/param-method-from-unnormalized-param-env.rs b/tests/ui/traits/next-solver/method/param-method-from-unnormalized-param-env.rs deleted file mode 100644 index dde4f745879..00000000000 --- a/tests/ui/traits/next-solver/method/param-method-from-unnormalized-param-env.rs +++ /dev/null @@ -1,17 +0,0 @@ -//@ check-pass -//@ compile-flags: -Znext-solver - -// Regression test for <https://github.com/rust-lang/trait-system-refactor-initiative/issues/214>. - -fn execute<K, F, R>(q: F::Item) -> R -where - F: Iterator<Item = R>, - // Both of the below bounds should be considered for `.into()`, and then be combined - // into a single `R: Into<?0>` bound which can be inferred to `?0 = R`. - F::Item: Into<K>, - R: Into<String>, -{ - q.into() -} - -fn main() {} |
