#![allow(unused)]
#![warn(clippy::redundant_slicing)]

fn main() {
    let slice: &[u32] = &[0];
    let _ = &slice[..];

    let v = vec![0];
    let _ = &v[..]; // Changes the type
    let _ = &(&v[..])[..]; // Outer borrow is redundant

    static S: &[u8] = &[0, 1, 2];
    let err = &mut &S[..]; // Should reborrow instead of slice

    let mut vec = vec![0];
    let mut_slice = &mut *vec;
    let _ = &mut mut_slice[..]; // Should reborrow instead of slice

    macro_rules! m {
        ($e:expr) => {
            $e
        };
    }
    let _ = &m!(slice)[..];

    macro_rules! m2 {
        ($e:expr) => {
            &$e[..]
        };
    }
    let _ = m2!(slice); // Don't lint in a macro
}