diff options
| author | lcnr <rust@lcnr.de> | 2022-07-08 16:33:59 +0200 |
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2022-07-08 16:33:59 +0200 |
| commit | aea2d7e20a259cf6ee553a77a2683b63cd7f1fd3 (patch) | |
| tree | c1244d6432c16054f7390cb21edb47abfe684173 | |
| parent | 1dcff2d5077244f49687ea25070958f23bd9edc6 (diff) | |
| download | rust-aea2d7e20a259cf6ee553a77a2683b63cd7f1fd3.tar.gz rust-aea2d7e20a259cf6ee553a77a2683b63cd7f1fd3.zip | |
don't use `commit_if_ok` during `higher_ranked_sub`
| -rw-r--r-- | compiler/rustc_infer/src/infer/higher_ranked/mod.rs | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/compiler/rustc_infer/src/infer/higher_ranked/mod.rs b/compiler/rustc_infer/src/infer/higher_ranked/mod.rs index c82685d1b70..12c44b4baaa 100644 --- a/compiler/rustc_infer/src/infer/higher_ranked/mod.rs +++ b/compiler/rustc_infer/src/infer/higher_ranked/mod.rs @@ -34,31 +34,27 @@ impl<'a, 'tcx> CombineFields<'a, 'tcx> { T: Relate<'tcx>, { let span = self.trace.cause.span; + // First, we instantiate each bound region in the supertype with a + // fresh placeholder region. Note that this automatically creates + // a new universe if needed. + let sup_prime = self.infcx.replace_bound_vars_with_placeholders(sup); - self.infcx.commit_if_ok(|_| { - // First, we instantiate each bound region in the supertype with a - // fresh placeholder region. Note that this automatically creates - // a new universe if needed. - let sup_prime = self.infcx.replace_bound_vars_with_placeholders(sup); + // Next, we instantiate each bound region in the subtype + // with a fresh region variable. These region variables -- + // but no other pre-existing region variables -- can name + // the placeholders. + let sub_prime = self.infcx.replace_bound_vars_with_fresh_vars(span, HigherRankedType, sub); - // Next, we instantiate each bound region in the subtype - // with a fresh region variable. These region variables -- - // but no other pre-existing region variables -- can name - // the placeholders. - let sub_prime = - self.infcx.replace_bound_vars_with_fresh_vars(span, HigherRankedType, sub); + debug!("a_prime={:?}", sub_prime); + debug!("b_prime={:?}", sup_prime); - debug!("a_prime={:?}", sub_prime); - debug!("b_prime={:?}", sup_prime); + // Compare types now that bound regions have been replaced. + let result = self.sub(sub_is_expected).relate(sub_prime, sup_prime)?; - // Compare types now that bound regions have been replaced. - let result = self.sub(sub_is_expected).relate(sub_prime, sup_prime)?; - - debug!("higher_ranked_sub: OK result={result:?}"); - // NOTE: returning the result here would be dangerous as it contains - // placeholders which **must not** be named afterwards. - Ok(()) - }) + debug!("OK result={result:?}"); + // NOTE: returning the result here would be dangerous as it contains + // placeholders which **must not** be named afterwards. + Ok(()) } } |
