//@ check-pass


#![allow(unused_variables)]

fn ref_() {
    let bytes: Vec<u8> = b"Hello"[..].to_vec();
    let some = Some(bytes);

    let Some(ref a) = Some(()) else { return };

    // | ref | type annotation | & |
    // | --- | --------------- | - |
    // | x   | x               |   | error
    // | x   | x               | x | error
    // |     | x               |   | error
    // |     | x               | x | error
    // | x   |                 |   |
    let Some(ref a) = some else { return }; // OK
    let b: &[u8] = a;

    // | x   |                 | x |
    let Some(ref a) = &some else { return }; // OK
    let b: &[u8] = a;


    // |     |                 | x |
    let Some(a) = &some else { return }; // OK
    let b: &[u8] = a;

    let Some(a): Option<&[u8]> = some.as_deref() else { return }; // OK
    let b: &[u8] = a;
    let Some(ref  a): Option<&[u8]> = some.as_deref() else { return }; // OK
    let b: &[u8] = a;
}

fn ref_mut() {
    // This `ref mut` case had an ICE, see issue #89960
    let Some(ref mut a) = Some(()) else { return };

    let bytes: Vec<u8> = b"Hello"[..].to_vec();
    let mut some = Some(bytes);

    // | ref mut | type annotation | &mut |
    // | ------- | --------------- | ---- |
    // | x       | x               |      | error
    // | x       | x               | x    | error
    // |         | x               |      | error
    // |         | x               | x    | error
    // | x       |                 |      |
    let Some(ref mut a) = some else { return }; // OK
    let b: &mut [u8] = a;

    // | x       |                 | x    |
    let Some(ref mut a) = &mut some else { return }; // OK
    let b: &mut [u8] = a;

    // |         |                 | x    |
    let Some(a) = &mut some else { return }; // OK
    let b: &mut [u8] = a;

    let Some(a): Option<&mut [u8]> = some.as_deref_mut() else { return }; // OK
    let b: &mut [u8] = a;
    let Some(ref mut a): Option<&mut [u8]> = some.as_deref_mut() else { return }; // OK
    let b: &mut [u8] = a;
}

fn main() {
    ref_();
    ref_mut();
}
