mirror of
https://github.com/rust-lang/rust
synced 2024-11-05 20:45:15 +00:00
27 lines
617 B
Rust
27 lines
617 B
Rust
// Pin's PartialEq implementation allowed to access the pointer allowing for
|
|
// unsoundness by using Rc::get_mut to move value within Rc.
|
|
// See https://internals.rust-lang.org/t/unsoundness-in-pin/11311/73 for more details.
|
|
|
|
use std::ops::Deref;
|
|
use std::pin::Pin;
|
|
use std::rc::Rc;
|
|
|
|
struct Apple;
|
|
|
|
impl Deref for Apple {
|
|
type Target = Apple;
|
|
fn deref(&self) -> &Apple {
|
|
&Apple
|
|
}
|
|
}
|
|
|
|
impl PartialEq<Rc<Apple>> for Apple {
|
|
fn eq(&self, _rc: &Rc<Apple>) -> bool {
|
|
unreachable!()
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let _ = Pin::new(Apple) == Rc::pin(Apple);
|
|
//~^ ERROR type mismatch resolving
|
|
}
|