Skip to content

Commit 23c2dc3

Browse files
Only consider predicate non-global if binder vars are in PREDICATE binder
1 parent be181dd commit 23c2dc3

File tree

2 files changed

+5
-5
lines changed
  • compiler
    • rustc_hir_analysis/src/check
    • rustc_trait_selection/src/traits/select

2 files changed

+5
-5
lines changed

compiler/rustc_hir_analysis/src/check/wfcheck.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ use rustc_middle::query::Providers;
1919
use rustc_middle::traits::solve::NoSolution;
2020
use rustc_middle::ty::trait_def::TraitSpecializationKind;
2121
use rustc_middle::ty::{
22-
self, AdtKind, GenericArgKind, GenericArgs, GenericParamDefKind, Ty, TyCtxt, TypeFlags,
23-
TypeFoldable, TypeSuperVisitable, TypeVisitable, TypeVisitableExt, TypeVisitor, TypingMode,
24-
Upcast,
22+
self, AdtKind, GenericArgKind, GenericArgs, GenericParamDefKind, Ty, TyCtxt, TypeFoldable,
23+
TypeSuperVisitable, TypeVisitable, TypeVisitableExt, TypeVisitor, TypingMode, Upcast,
2524
};
2625
use rustc_middle::{bug, span_bug};
2726
use rustc_session::parse::feature_err;
@@ -2291,7 +2290,7 @@ impl<'tcx> WfCheckingCtxt<'_, 'tcx> {
22912290
continue;
22922291
}
22932292
// Match the existing behavior.
2294-
if pred.is_global() && !pred.has_type_flags(TypeFlags::HAS_BINDER_VARS) {
2293+
if pred.is_global() && pred.kind().bound_vars().is_empty() {
22952294
let pred = self.normalize(span, None, pred);
22962295

22972296
// only use the span of the predicate clause (#90869)

compiler/rustc_trait_selection/src/traits/select/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1862,7 +1862,8 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
18621862
//
18631863
// Our handling of where-bounds is generally fairly messy but necessary for backwards
18641864
// compatibility, see #50825 for why we need to handle global where-bounds like this.
1865-
let is_global = |c: ty::PolyTraitPredicate<'tcx>| c.is_global() && !c.has_bound_vars();
1865+
let is_global =
1866+
|c: ty::PolyTraitPredicate<'tcx>| c.is_global() && c.bound_vars().is_empty();
18661867
let param_candidates = candidates
18671868
.iter()
18681869
.filter_map(|c| if let ParamCandidate(p) = c.candidate { Some(p) } else { None });

0 commit comments

Comments
 (0)