Rollup merge of #65011 - estebank:ice-o-matic, r=zackmdavis
Do not ICE when dereferencing non-Copy raw pointer CC #52262. Confirmed to remove the unnecessary ICE, but without a repro case.
This commit is contained in:
commit
2b225bab13
@ -1944,14 +1944,16 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
self.is_mutable(place.as_ref(), is_local_mutation_allowed),
|
||||
self.errors_buffer.is_empty()
|
||||
) {
|
||||
// rust-lang/rust#46908: In pure NLL mode this code path should
|
||||
// be unreachable (and thus we signal an ICE in the else branch here).
|
||||
span_bug!(
|
||||
span,
|
||||
// rust-lang/rust#46908: In pure NLL mode this code path should be
|
||||
// unreachable, but we use `delay_span_bug` because we can hit this when
|
||||
// dereferencing a non-Copy raw pointer *and* have `-Ztreat-err-as-bug`
|
||||
// enabled. We don't want to ICE for that case, as other errors will have
|
||||
// been emitted (#52262).
|
||||
self.infcx.tcx.sess.delay_span_bug(span, &format!(
|
||||
"Accessing `{:?}` with the kind `{:?}` shouldn't be possible",
|
||||
place,
|
||||
kind,
|
||||
);
|
||||
));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
25
src/test/ui/issues/issue-52262.rs
Normal file
25
src/test/ui/issues/issue-52262.rs
Normal file
@ -0,0 +1,25 @@
|
||||
// compile-flags:-Ztreat-err-as-bug=5
|
||||
#[derive(Debug)]
|
||||
enum MyError {
|
||||
NotFound { key: Vec<u8> },
|
||||
Err41,
|
||||
}
|
||||
|
||||
impl std::error::Error for MyError {}
|
||||
|
||||
impl std::fmt::Display for MyError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
match self {
|
||||
MyError::NotFound { key } => write!(
|
||||
f,
|
||||
"unknown error with code {}.",
|
||||
String::from_utf8(*key).unwrap()
|
||||
//~^ ERROR cannot move out of `*key` which is behind a shared reference
|
||||
),
|
||||
MyError::Err41 => write!(f, "Sit by a lake"),
|
||||
}
|
||||
}
|
||||
}
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
9
src/test/ui/issues/issue-52262.stderr
Normal file
9
src/test/ui/issues/issue-52262.stderr
Normal file
@ -0,0 +1,9 @@
|
||||
error[E0507]: cannot move out of `*key` which is behind a shared reference
|
||||
--> $DIR/issue-52262.rs:16:35
|
||||
|
|
||||
LL | String::from_utf8(*key).unwrap()
|
||||
| ^^^^ move occurs because `*key` has type `std::vec::Vec<u8>`, which does not implement the `Copy` trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0507`.
|
Loading…
x
Reference in New Issue
Block a user