Rollup merge of #125664 - compiler-errors:trace-tweaks, r=lcnr
Tweak relations to no longer rely on `TypeTrace` Remove `At::trace`, and inline all of the `Trace::equate`,etc methods into `At`. The only nontrivial change is that we use `AliasTerm` to relate two unevaluated consts in the old-solver impl of `ConstEquate`, since `AliasTerm` does implement `ToTrace` and will relate the args structurally (shallowly). r? lcnr
This commit is contained in:
commit
4c1228276b
8 changed files with 96 additions and 149 deletions
|
@ -363,7 +363,6 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
|
|||
for (&orig, response) in iter::zip(original_values, var_values.var_values) {
|
||||
let InferOk { value: (), obligations } = infcx
|
||||
.at(&cause, param_env)
|
||||
.trace(orig, response)
|
||||
.eq_structurally_relating_aliases(orig, response)
|
||||
.unwrap();
|
||||
assert!(obligations.is_empty());
|
||||
|
|
|
@ -776,7 +776,6 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
|
|||
let InferOk { value: (), obligations } = self
|
||||
.infcx
|
||||
.at(&ObligationCause::dummy(), param_env)
|
||||
.trace(term, ctor_term)
|
||||
.eq_structurally_relating_aliases(term, ctor_term)?;
|
||||
debug_assert!(obligations.is_empty());
|
||||
self.relate(param_env, alias, variance, rigid_ctor)
|
||||
|
@ -796,11 +795,8 @@ impl<'tcx> EvalCtxt<'_, InferCtxt<'tcx>> {
|
|||
rhs: T,
|
||||
) -> Result<(), NoSolution> {
|
||||
let cause = ObligationCause::dummy();
|
||||
let InferOk { value: (), obligations } = self
|
||||
.infcx
|
||||
.at(&cause, param_env)
|
||||
.trace(lhs, rhs)
|
||||
.eq_structurally_relating_aliases(lhs, rhs)?;
|
||||
let InferOk { value: (), obligations } =
|
||||
self.infcx.at(&cause, param_env).eq_structurally_relating_aliases(lhs, rhs)?;
|
||||
assert!(obligations.is_empty());
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -566,10 +566,13 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
|
|||
{
|
||||
if let Ok(new_obligations) = infcx
|
||||
.at(&obligation.cause, obligation.param_env)
|
||||
.trace(c1, c2)
|
||||
// Can define opaque types as this is only reachable with
|
||||
// `generic_const_exprs`
|
||||
.eq(DefineOpaqueTypes::Yes, a.args, b.args)
|
||||
.eq(
|
||||
DefineOpaqueTypes::Yes,
|
||||
ty::AliasTerm::from(a),
|
||||
ty::AliasTerm::from(b),
|
||||
)
|
||||
{
|
||||
return ProcessResult::Changed(mk_pending(
|
||||
new_obligations.into_obligations(),
|
||||
|
|
|
@ -910,10 +910,13 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
if let Ok(InferOk { obligations, value: () }) = self
|
||||
.infcx
|
||||
.at(&obligation.cause, obligation.param_env)
|
||||
.trace(c1, c2)
|
||||
// Can define opaque types as this is only reachable with
|
||||
// `generic_const_exprs`
|
||||
.eq(DefineOpaqueTypes::Yes, a.args, b.args)
|
||||
.eq(
|
||||
DefineOpaqueTypes::Yes,
|
||||
ty::AliasTerm::from(a),
|
||||
ty::AliasTerm::from(b),
|
||||
)
|
||||
{
|
||||
return self.evaluate_predicates_recursively(
|
||||
previous_stack,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue