diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-03-16 22:42:00 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-03-16 22:42:00 +0000 |
commit | c723ffec2507ab15ba74ce86d15645cf194d9196 (patch) | |
tree | 80c46c7f97eb0158db00b2c4710dd54073c36733 /tests/ui/pin_project/override-priv-mod.rs | |
parent | 410b9e3b15bab1e68feb13f22a5240053b1363c5 (diff) | |
parent | 1b1144c17aba196c4ca53e7596a708d993479b39 (diff) | |
download | pin-project-android13-mainline-adservices-release.tar.gz |
Snap for 8310876 from 1b1144c17aba196c4ca53e7596a708d993479b39 to mainline-adservices-releaseaml_ads_331920180aml_ads_331814200aml_ads_331710270aml_ads_331611190aml_ads_331511020aml_ads_331418080aml_ads_331131000android13-mainline-adservices-release
Change-Id: I6491f6a3cdf0317cb79be18d620105bf3bbfc99b
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 +} |