The non-aliasing of `&mut T` is still theoretical:

```rust
fn main() {
    let mut x = 5;
    let y = &mut x;
    *y = 10;
    let z = x;
    println!("{} {}", z, *y);
}
```

The aliasing rules are just a way to get safe mutability. This specific case is going to change to support data parallelism, but it's not the case that we have these rules today.