1
Fork 0

Delay bug to prevent ICE in MIR borrowck

This commit is contained in:
Yuki Okushi 2020-01-07 16:51:34 +09:00
parent ed6468da16
commit 4fce9c27fb
3 changed files with 30 additions and 1 deletions

View file

@ -28,7 +28,13 @@ impl<'tcx> MirPass<'tcx> for ElaborateDrops {
let param_env = tcx.param_env(src.def_id()).with_reveal_all();
let move_data = match MoveData::gather_moves(body, tcx, param_env) {
Ok(move_data) => move_data,
Err(_) => bug!("No `move_errors` should be allowed in MIR borrowck"),
Err((move_data, _)) => {
tcx.sess.delay_span_bug(
body.span,
"No `move_errors` should be allowed in MIR borrowck",
);
move_data
}
};
let elaborate_patch = {
let body = &*body;

View file

@ -0,0 +1,7 @@
struct Bug {
A: [(); { *"" }.len()],
//~^ ERROR: cannot move a value of type str
//~| ERROR: cannot move out of a shared reference
}
fn main() {}

View file

@ -0,0 +1,16 @@
error[E0161]: cannot move a value of type str: the size of str cannot be statically determined
--> $DIR/issue-67947.rs:2:13
|
LL | A: [(); { *"" }.len()],
| ^^^^^^^
error[E0507]: cannot move out of a shared reference
--> $DIR/issue-67947.rs:2:15
|
LL | A: [(); { *"" }.len()],
| ^^^ move occurs because value has type `str`, which does not implement the `Copy` trait
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0161, E0507.
For more information about an error, try `rustc --explain E0161`.