Fix ICE when yielding in fn returning impl Trait
This commit is contained in:
parent
ff23ad3179
commit
7c108ababc
3 changed files with 39 additions and 3 deletions
|
@ -117,9 +117,29 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert!(body.yield_ty().is_some() == universal_regions.yield_ty.is_some());
|
debug!(
|
||||||
if let Some(mir_yield_ty) = body.yield_ty() {
|
"equate_inputs_and_outputs: body.yield_ty {:?}, universal_regions.yield_ty {:?}",
|
||||||
let ur_yield_ty = universal_regions.yield_ty.unwrap();
|
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;
|
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);
|
self.equate_normalized_input_or_output(ur_yield_ty, mir_yield_ty, yield_span);
|
||||||
}
|
}
|
||||||
|
|
7
src/test/ui/generator/issue-91477.rs
Normal file
7
src/test/ui/generator/issue-91477.rs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#![feature(generators)]
|
||||||
|
|
||||||
|
fn foo() -> impl Sized {
|
||||||
|
yield 1; //~ ERROR E0627
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
9
src/test/ui/generator/issue-91477.stderr
Normal file
9
src/test/ui/generator/issue-91477.stderr
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
error[E0627]: yield expression outside of generator literal
|
||||||
|
--> $DIR/issue-91477.rs:4:5
|
||||||
|
|
|
||||||
|
LL | yield 1;
|
||||||
|
| ^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0627`.
|
Loading…
Add table
Add a link
Reference in a new issue