diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-01-07 16:51:34 +0900 |
|---|---|---|
| committer | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-01-09 05:57:28 +0900 |
| commit | 4fce9c27fbd7e0b54ebf3b5ad7620d95dea2f982 (patch) | |
| tree | 52704a8388077dcc30374518064059817de613f2 | |
| parent | ed6468da160bd67a2ce0573427f09a98daff8c07 (diff) | |
| download | rust-4fce9c27fbd7e0b54ebf3b5ad7620d95dea2f982.tar.gz rust-4fce9c27fbd7e0b54ebf3b5ad7620d95dea2f982.zip | |
Delay bug to prevent ICE in MIR borrowck
| -rw-r--r-- | src/librustc_mir/transform/elaborate_drops.rs | 8 | ||||
| -rw-r--r-- | src/test/ui/mir/issue-67947.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/mir/issue-67947.stderr | 16 |
3 files changed, 30 insertions, 1 deletions
diff --git a/src/librustc_mir/transform/elaborate_drops.rs b/src/librustc_mir/transform/elaborate_drops.rs index 86baf4deb51..b9d9ed592fc 100644 --- a/src/librustc_mir/transform/elaborate_drops.rs +++ b/src/librustc_mir/transform/elaborate_drops.rs @@ -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; diff --git a/src/test/ui/mir/issue-67947.rs b/src/test/ui/mir/issue-67947.rs new file mode 100644 index 00000000000..79e75e655ff --- /dev/null +++ b/src/test/ui/mir/issue-67947.rs @@ -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() {} diff --git a/src/test/ui/mir/issue-67947.stderr b/src/test/ui/mir/issue-67947.stderr new file mode 100644 index 00000000000..d5262181620 --- /dev/null +++ b/src/test/ui/mir/issue-67947.stderr @@ -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`. |
