mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Rollup merge of #117686 - compiler-errors:gen-body, r=wesleywiser
Build pre-coroutine-transform coroutine body on error I was accidentally building the post-transform coroutine body, rather than the pre-transform coroutine body. There's no pinning expected here yet, and the return type isn't yet transformed into `CoroutineState`. Fixes #117670
This commit is contained in:
commit
d2cdf6c479
@ -656,17 +656,7 @@ fn construct_error(tcx: TyCtxt<'_>, def_id: LocalDefId, guar: ErrorGuaranteed) -
|
|||||||
let args = args.as_coroutine();
|
let args = args.as_coroutine();
|
||||||
let yield_ty = args.yield_ty();
|
let yield_ty = args.yield_ty();
|
||||||
let return_ty = args.return_ty();
|
let return_ty = args.return_ty();
|
||||||
let self_ty = Ty::new_adt(
|
(vec![coroutine_ty, args.resume_ty()], return_ty, Some(yield_ty))
|
||||||
tcx,
|
|
||||||
tcx.adt_def(tcx.lang_items().pin_type().unwrap()),
|
|
||||||
tcx.mk_args(&[Ty::new_mut_ref(tcx, tcx.lifetimes.re_erased, coroutine_ty).into()]),
|
|
||||||
);
|
|
||||||
let coroutine_state = Ty::new_adt(
|
|
||||||
tcx,
|
|
||||||
tcx.adt_def(tcx.lang_items().coroutine_state().unwrap()),
|
|
||||||
tcx.mk_args(&[yield_ty.into(), return_ty.into()]),
|
|
||||||
);
|
|
||||||
(vec![self_ty, args.resume_ty()], coroutine_state, Some(yield_ty))
|
|
||||||
}
|
}
|
||||||
dk => bug!("{:?} is not a body: {:?}", def_id, dk),
|
dk => bug!("{:?} is not a body: {:?}", def_id, dk),
|
||||||
};
|
};
|
||||||
|
8
tests/ui/mir/build-async-error-body-correctly.rs
Normal file
8
tests/ui/mir/build-async-error-body-correctly.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// edition: 2021
|
||||||
|
|
||||||
|
async fn asyncfn() {
|
||||||
|
let binding = match true {};
|
||||||
|
//~^ ERROR non-exhaustive patterns: type `bool` is non-empty
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
17
tests/ui/mir/build-async-error-body-correctly.stderr
Normal file
17
tests/ui/mir/build-async-error-body-correctly.stderr
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
error[E0004]: non-exhaustive patterns: type `bool` is non-empty
|
||||||
|
--> $DIR/build-async-error-body-correctly.rs:4:25
|
||||||
|
|
|
||||||
|
LL | let binding = match true {};
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: the matched value is of type `bool`
|
||||||
|
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown
|
||||||
|
|
|
||||||
|
LL ~ let binding = match true {
|
||||||
|
LL + _ => todo!(),
|
||||||
|
LL ~ };
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0004`.
|
Loading…
Reference in New Issue
Block a user