| // Regression test for #68641 |
| |
| #![feature(generic_associated_types)] |
| //~^ WARNING the feature `generic_associated_types` is incomplete and may not |
| |
| trait UnsafeCopy { |
| type Item<'a>: Copy; |
| |
| fn copy<'a>(item: &Self::Item<'a>) -> Self::Item<'a> { |
| *item |
| } |
| } |
| |
| impl<T> UnsafeCopy for T { |
| type Item<'a> = T; |
| //~^ ERROR the trait bound `T: std::marker::Copy` is not satisfied |
| } |
| |
| fn main() { |
| let mut s = String::from("Hello world!"); |
| |
| let copy = String::copy(&s); |
| |
| // Do we indeed point to the samme memory? |
| assert!(s.as_ptr() == copy.as_ptr()); |
| |
| // Any use of `copy` is certeinly UB after this |
| drop(s); |
| |
| // UB UB UB UB UB!! |
| println!("{}", copy); |
| } |