Add -Ztrait-solver=next-coherence
This commit is contained in:
parent
e0acff796a
commit
b637048a89
@ -2337,6 +2337,14 @@ pub fn next_trait_solver_globally(self) -> bool {
|
|||||||
self.sess.opts.unstable_opts.trait_solver == rustc_session::config::TraitSolver::Next
|
self.sess.opts.unstable_opts.trait_solver == rustc_session::config::TraitSolver::Next
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn next_trait_solver_in_coherence(self) -> bool {
|
||||||
|
matches!(
|
||||||
|
self.sess.opts.unstable_opts.trait_solver,
|
||||||
|
rustc_session::config::TraitSolver::Next
|
||||||
|
| rustc_session::config::TraitSolver::NextCoherence
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn lower_impl_trait_in_trait_to_assoc_ty(self) -> bool {
|
pub fn lower_impl_trait_in_trait_to_assoc_ty(self) -> bool {
|
||||||
self.sess.opts.unstable_opts.lower_impl_trait_in_trait_to_assoc_ty
|
self.sess.opts.unstable_opts.lower_impl_trait_in_trait_to_assoc_ty
|
||||||
}
|
}
|
||||||
|
@ -610,6 +610,8 @@ pub enum TraitSolver {
|
|||||||
Chalk,
|
Chalk,
|
||||||
/// Experimental trait solver in `rustc_trait_selection::solve`
|
/// Experimental trait solver in `rustc_trait_selection::solve`
|
||||||
Next,
|
Next,
|
||||||
|
/// Use the new trait solver during coherence
|
||||||
|
NextCoherence,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum Input {
|
pub enum Input {
|
||||||
|
@ -986,6 +986,7 @@ pub(crate) fn parse_trait_solver(slot: &mut TraitSolver, v: Option<&str>) -> boo
|
|||||||
Some("classic") => *slot = TraitSolver::Classic,
|
Some("classic") => *slot = TraitSolver::Classic,
|
||||||
Some("chalk") => *slot = TraitSolver::Chalk,
|
Some("chalk") => *slot = TraitSolver::Chalk,
|
||||||
Some("next") => *slot = TraitSolver::Next,
|
Some("next") => *slot = TraitSolver::Next,
|
||||||
|
Some("next-coherence") => *slot = TraitSolver::NextCoherence,
|
||||||
// default trait solver is subject to change..
|
// default trait solver is subject to change..
|
||||||
Some("default") => *slot = TraitSolver::Classic,
|
Some("default") => *slot = TraitSolver::Classic,
|
||||||
_ => return false,
|
_ => return false,
|
||||||
|
@ -182,6 +182,7 @@ fn overlap<'tcx>(
|
|||||||
.with_opaque_type_inference(DefiningAnchor::Bubble)
|
.with_opaque_type_inference(DefiningAnchor::Bubble)
|
||||||
.skip_leak_check(skip_leak_check.is_yes())
|
.skip_leak_check(skip_leak_check.is_yes())
|
||||||
.intercrate(true)
|
.intercrate(true)
|
||||||
|
.with_next_trait_solver(tcx.next_trait_solver_in_coherence())
|
||||||
.build();
|
.build();
|
||||||
let selcx = &mut SelectionContext::new(&infcx);
|
let selcx = &mut SelectionContext::new(&infcx);
|
||||||
if track_ambiguity_causes.is_yes() {
|
if track_ambiguity_causes.is_yes() {
|
||||||
|
@ -35,6 +35,7 @@ impl<'tcx> TraitEngineExt<'tcx> for dyn TraitEngine<'tcx> {
|
|||||||
fn new(tcx: TyCtxt<'tcx>) -> Box<Self> {
|
fn new(tcx: TyCtxt<'tcx>) -> Box<Self> {
|
||||||
match tcx.sess.opts.unstable_opts.trait_solver {
|
match tcx.sess.opts.unstable_opts.trait_solver {
|
||||||
TraitSolver::Classic => Box::new(FulfillmentContext::new()),
|
TraitSolver::Classic => Box::new(FulfillmentContext::new()),
|
||||||
|
TraitSolver::NextCoherence => Box::new(FulfillmentContext::new()),
|
||||||
TraitSolver::Chalk => Box::new(ChalkFulfillmentContext::new()),
|
TraitSolver::Chalk => Box::new(ChalkFulfillmentContext::new()),
|
||||||
TraitSolver::Next => Box::new(NextFulfillmentCtxt::new()),
|
TraitSolver::Next => Box::new(NextFulfillmentCtxt::new()),
|
||||||
}
|
}
|
||||||
@ -43,6 +44,7 @@ fn new(tcx: TyCtxt<'tcx>) -> Box<Self> {
|
|||||||
fn new_in_snapshot(tcx: TyCtxt<'tcx>) -> Box<Self> {
|
fn new_in_snapshot(tcx: TyCtxt<'tcx>) -> Box<Self> {
|
||||||
match tcx.sess.opts.unstable_opts.trait_solver {
|
match tcx.sess.opts.unstable_opts.trait_solver {
|
||||||
TraitSolver::Classic => Box::new(FulfillmentContext::new_in_snapshot()),
|
TraitSolver::Classic => Box::new(FulfillmentContext::new_in_snapshot()),
|
||||||
|
TraitSolver::NextCoherence => Box::new(FulfillmentContext::new_in_snapshot()),
|
||||||
TraitSolver::Chalk => Box::new(ChalkFulfillmentContext::new_in_snapshot()),
|
TraitSolver::Chalk => Box::new(ChalkFulfillmentContext::new_in_snapshot()),
|
||||||
TraitSolver::Next => Box::new(NextFulfillmentCtxt::new()),
|
TraitSolver::Next => Box::new(NextFulfillmentCtxt::new()),
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user