### What it does
Checks for calls to `core::mem::swap` where either parameter is derived from a pointer

### Why is this bad?
When at least one parameter to `swap` is derived from a pointer it may overlap with the
other. This would then lead to undefined behavior.

### Example
```
unsafe fn swap(x: &[*mut u32], y: &[*mut u32]) {
    for (&x, &y) in x.iter().zip(y) {
        core::mem::swap(&mut *x, &mut *y);
    }
}
```
Use instead:
```
unsafe fn swap(x: &[*mut u32], y: &[*mut u32]) {
    for (&x, &y) in x.iter().zip(y) {
        core::ptr::swap(x, y);
    }
}
```