diff options
| author | bors <bors@rust-lang.org> | 2021-12-04 02:53:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-12-04 02:53:54 +0000 |
| commit | f5815727786aa1ed2793af05cf65c5d79c290c67 (patch) | |
| tree | 5c31934526b8f1a635e3212d45937ddffef49d10 /compiler/rustc_borrowck | |
| parent | 14c1e71d095a5500def51d4e405bd2b0010f3d37 (diff) | |
| parent | df51bffe6bef0c15f6e29a15ea54f269b251e179 (diff) | |
| download | rust-f5815727786aa1ed2793af05cf65c5d79c290c67.tar.gz rust-f5815727786aa1ed2793af05cf65c5d79c290c67.zip | |
Auto merge of #91505 - matthiaskrgr:rollup-orxgsxo, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #90538 (Document how recursion is handled for `ty::Ty`) - #90851 (Add unchecked downcast methods) - #91209 (Implement ``@snapshot`` check for htmldocck) - #91385 (Suggest the `pat_param` specifier before `|` on 2021 edition ) - #91478 (Remove incorrect newline from float cast suggestion) - #91481 (Use let_else in some more places in rustc_lint) - #91488 (Fix ICE when `yield`ing in function returning `impl Trait`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_borrowck')
| -rw-r--r-- | compiler/rustc_borrowck/src/type_check/input_output.rs | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/compiler/rustc_borrowck/src/type_check/input_output.rs b/compiler/rustc_borrowck/src/type_check/input_output.rs index 92d2d04f23f..bc740de5150 100644 --- a/compiler/rustc_borrowck/src/type_check/input_output.rs +++ b/compiler/rustc_borrowck/src/type_check/input_output.rs @@ -117,9 +117,29 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> { } } - assert!(body.yield_ty().is_some() == universal_regions.yield_ty.is_some()); - if let Some(mir_yield_ty) = body.yield_ty() { - let ur_yield_ty = universal_regions.yield_ty.unwrap(); + debug!( + "equate_inputs_and_outputs: body.yield_ty {:?}, universal_regions.yield_ty {:?}", + body.yield_ty(), + universal_regions.yield_ty + ); + + // We will not have a universal_regions.yield_ty if we yield (by accident) + // outside of a generator and return an `impl Trait`, so emit a delay_span_bug + // because we don't want to panic in an assert here if we've already got errors. + if body.yield_ty().is_some() != universal_regions.yield_ty.is_some() { + self.tcx().sess.delay_span_bug( + body.span, + &format!( + "Expected body to have yield_ty ({:?}) iff we have a UR yield_ty ({:?})", + body.yield_ty(), + universal_regions.yield_ty, + ), + ); + } + + if let (Some(mir_yield_ty), Some(ur_yield_ty)) = + (body.yield_ty(), universal_regions.yield_ty) + { let yield_span = body.local_decls[RETURN_PLACE].source_info.span; self.equate_normalized_input_or_output(ur_yield_ty, mir_yield_ty, yield_span); } |
