//@ run-rustfix
#![allow(unused_variables, dead_code)]
#[derive(Clone)]
struct Struct;
#[derive(Clone)]
struct Struct2;
// We use a second one here because otherwise when applying suggestions we'd end up with two
// `#[derive(Clone)]` annotations.

fn test1() {
    let mut val = Some(Struct);
    while let Some(ref foo) = val { //~ ERROR use of moved value
        if true {
            val = None;
        } else {

        }
    }
}

fn test2() {
    let mut foo = Some(Struct);
    let _x = foo.clone().unwrap();
    if true {
        foo = Some(Struct);
    } else {
    }
    let _y = foo; //~ ERROR use of moved value: `foo`
}

fn test3() {
    let mut foo = Some(Struct2);
    let _x = foo.clone().unwrap();
    if true {
        foo = Some(Struct2);
    } else if true {
        foo = Some(Struct2);
    } else if true {
        foo = Some(Struct2);
    } else if true {
        foo = Some(Struct2);
    } else {
    }
    let _y = foo; //~ ERROR use of moved value: `foo`
}

fn main() {}
