diff options
| author | b-naber <bn263@gmx.de> | 2022-04-26 10:56:04 +0200 |
|---|---|---|
| committer | b-naber <bn263@gmx.de> | 2022-04-26 11:48:59 +0200 |
| commit | 6fc3e630fb98cc6200f60ebbb7c7f826b2d48407 (patch) | |
| tree | eceed88d926f20e8f74e6d2f963a7785835659f9 /compiler/rustc_trait_selection/src | |
| parent | f7eae4e580d1e4db03800732421288c2ab557f1a (diff) | |
add hacky closure to struct_tail_with_normalize in order to allow us to walk valtrees in lockstep with the type
Diffstat (limited to 'compiler/rustc_trait_selection/src')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/project.rs | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/project.rs b/compiler/rustc_trait_selection/src/traits/project.rs index 8ba390c71db..c7a61cbe25a 100644 --- a/compiler/rustc_trait_selection/src/traits/project.rs +++ b/compiler/rustc_trait_selection/src/traits/project.rs @@ -1519,18 +1519,22 @@ fn assemble_candidates_from_impls<'cx, 'tcx>( // Any type with multiple potential metadata types is therefore not eligible. let self_ty = selcx.infcx().shallow_resolve(obligation.predicate.self_ty()); - let tail = selcx.tcx().struct_tail_with_normalize(self_ty, |ty| { - // We throw away any obligations we get from this, since we normalize - // and confirm these obligations once again during confirmation - normalize_with_depth( - selcx, - obligation.param_env, - obligation.cause.clone(), - obligation.recursion_depth + 1, - ty, - ) - .value - }); + let tail = selcx.tcx().struct_tail_with_normalize( + self_ty, + |ty| { + // We throw away any obligations we get from this, since we normalize + // and confirm these obligations once again during confirmation + normalize_with_depth( + selcx, + obligation.param_env, + obligation.cause.clone(), + obligation.recursion_depth + 1, + ty, + ) + .value + }, + || {}, + ); match tail.kind() { ty::Bool |
