| fn basic_raw() { |
| let mut x = 12; |
| let x = &mut x; |
| |
| assert_eq!(*x, 12); |
| |
| let raw = x as *mut i32; |
| unsafe { |
| *raw = 42; |
| } |
| |
| assert_eq!(*x, 42); |
| |
| let raw = x as *mut i32; |
| unsafe { |
| *raw = 12; |
| } |
| *x = 23; |
| |
| assert_eq!(*x, 23); |
| } |
| |
| fn assign_overlapping() { |
| // Test an assignment where LHS and RHS alias. |
| // In Mir, that's UB (see `fail/overlapping_assignment.rs`), but in surface Rust this is allowed. |
| let mut mem = [0u32; 4]; |
| let ptr = &mut mem as *mut [u32; 4]; |
| unsafe { *ptr = *ptr }; |
| } |
| |
| fn main() { |
| basic_raw(); |
| assign_overlapping(); |
| } |