Skip to content

Commit 054c1e3

Browse files
committed
update winnowing
1 parent bcb4dda commit 054c1e3

File tree

2 files changed

+35
-1
lines changed
  • compiler/rustc_trait_selection/src

2 files changed

+35
-1
lines changed

compiler/rustc_trait_selection/src/solve/assembly/mod.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -846,7 +846,16 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
846846
if let Some(result) = self.try_merge_responses(&responses) {
847847
return Ok(result);
848848
} else {
849-
self.flounder(&responses)
849+
let param_env_candidates = candidates
850+
.iter()
851+
.filter(|c| matches!(c.source, CandidateSource::ParamEnv(_)))
852+
.map(|c| c.result)
853+
.collect::<Vec<_>>();
854+
if let Some(result) = self.try_merge_responses(&param_env_candidates) {
855+
return Ok(result);
856+
} else {
857+
self.flounder(&responses)
858+
}
850859
}
851860
}
852861
}

compiler/rustc_trait_selection/src/traits/mod.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,31 @@ pub fn normalize_param_env_or_error<'tcx>(
390390
let mut predicates = non_outlives_predicates;
391391
predicates.extend(outlives_predicates);
392392
debug!("normalize_param_env_or_error: final predicates={:?}", predicates);
393+
if tcx.next_trait_solver_globally() {
394+
predicates.retain(|&p| {
395+
if p.is_global() {
396+
let infcx = tcx.infer_ctxt().build();
397+
let ocx = ObligationCtxt::new(&infcx);
398+
let param_env = ty::ParamEnv::empty();
399+
ocx.register_obligation(Obligation::new(
400+
tcx,
401+
ObligationCause::dummy(),
402+
param_env,
403+
p,
404+
));
405+
if !ocx.select_all_or_error().is_empty() {
406+
true
407+
} else if ocx.resolve_regions(&OutlivesEnvironment::new(param_env)).is_empty() {
408+
// A trivially true global bound, ignore it.
409+
false
410+
} else {
411+
true
412+
}
413+
} else {
414+
true
415+
}
416+
})
417+
}
393418
ty::ParamEnv::new(tcx.mk_clauses(&predicates), unnormalized_env.reveal())
394419
}
395420

0 commit comments

Comments
 (0)