Skip to content

Commit 696c88d

Browse files
committed
canonicalize const equate predicates
1 parent 0035d9d commit 696c88d

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

compiler/rustc_trait_selection/src/traits/fulfill.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use rustc_data_structures::obligation_forest::{Error, ForestObligation, Outcome}
44
use rustc_data_structures::obligation_forest::{ObligationForest, ObligationProcessor};
55
use rustc_errors::ErrorReported;
66
use rustc_hir as hir;
7+
use rustc_infer::infer::canonical::OriginalQueryValues;
78
use rustc_infer::traits::{SelectionError, TraitEngine, TraitEngineExt as _, TraitObligation};
89
use rustc_middle::mir::abstract_const::NotConstEvaluatable;
910
use rustc_middle::mir::interpret::ErrorHandled;
@@ -552,11 +553,13 @@ impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx> {
552553
if let (ty::ConstKind::Unevaluated(a), ty::ConstKind::Unevaluated(b)) =
553554
(c1.val, c2.val)
554555
{
555-
if self
556-
.selcx
557-
.tcx()
558-
.try_unify_abstract_consts(((a.def, a.substs), (b.def, b.substs)))
559-
{
556+
let canonical = infcx.canonicalize_query(
557+
((a.def, a.substs), (b.def, b.substs)),
558+
&mut OriginalQueryValues::default(),
559+
);
560+
debug!("canonical consts: {:?}", &canonical.value);
561+
562+
if self.selcx.tcx().try_unify_abstract_consts(canonical.value) {
560563
return ProcessResult::Changed(vec![]);
561564
}
562565
}

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

+8-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use rustc_errors::ErrorReported;
3333
use rustc_hir as hir;
3434
use rustc_hir::def_id::DefId;
3535
use rustc_hir::Constness;
36+
use rustc_infer::infer::canonical::OriginalQueryValues;
3637
use rustc_infer::infer::LateBoundRegionConversionTime;
3738
use rustc_middle::dep_graph::{DepKind, DepNodeIndex};
3839
use rustc_middle::mir::abstract_const::NotConstEvaluatable;
@@ -608,10 +609,13 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
608609
if let (ty::ConstKind::Unevaluated(a), ty::ConstKind::Unevaluated(b)) =
609610
(c1.val, c2.val)
610611
{
611-
if self
612-
.tcx()
613-
.try_unify_abstract_consts(((a.def, a.substs), (b.def, b.substs)))
614-
{
612+
let canonical = self.infcx.canonicalize_query(
613+
((a.def, a.substs), (b.def, b.substs)),
614+
&mut OriginalQueryValues::default(),
615+
);
616+
debug!("canonical consts: {:?}", &canonical.value);
617+
618+
if self.tcx().try_unify_abstract_consts(canonical.value) {
615619
return Ok(EvaluatedToOk);
616620
}
617621
}

0 commit comments

Comments
 (0)