diff options
author | David LeGare <legare@google.com> | 2022-03-02 20:59:51 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-03-02 20:59:51 +0000 |
commit | ac81d17ea0cce1b865bbecae5677eeef7b1703e4 (patch) | |
tree | 80c46c7f97eb0158db00b2c4710dd54073c36733 /tests/ui/pin_project/override-priv-mod.rs | |
parent | 23cdec702c0235804c847247f16c7bc73f9d9fce (diff) | |
parent | 8915193b0de5f14b58aea0cd7bd72a6083529dc2 (diff) | |
download | pin-project-ac81d17ea0cce1b865bbecae5677eeef7b1703e4.tar.gz |
Update pin-project to 1.0.10 am: 8915193b0d
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/pin-project/+/2005953
Change-Id: I3c1379108ed7a86c8c877b70d6c1d516280db2e5
Diffstat (limited to 'tests/ui/pin_project/override-priv-mod.rs')
-rw-r--r-- | tests/ui/pin_project/override-priv-mod.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/ui/pin_project/override-priv-mod.rs b/tests/ui/pin_project/override-priv-mod.rs new file mode 100644 index 0000000..890fd5b --- /dev/null +++ b/tests/ui/pin_project/override-priv-mod.rs @@ -0,0 +1,32 @@ +// https://discord.com/channels/273534239310479360/512792629516173323/870075511009857617 + +extern crate pin_project as pin_project_orig; +extern crate self as pin_project; + +pub use ::pin_project_orig::*; +mod __private { + pub use ::pin_project_orig::__private::*; + pub trait Drop {} +} + +use std::{marker::PhantomPinned, mem}; + +#[pin_project] //~ ERROR conflicting implementations of trait `_::FooMustNotImplDrop` +struct S { + #[pin] + f: (u8, PhantomPinned), +} + +impl Drop for S { + fn drop(&mut self) { + let prev = &self.f.0 as *const _ as usize; + let moved = mem::take(&mut self.f); // move pinned field + let moved = &moved.0 as *const _ as usize; + assert_eq!(prev, moved); // panic + } +} + +fn main() { + let mut x = Box::pin(S { f: (1, PhantomPinned) }); + let _f = x.as_mut().project().f; // first mutable access +} |