// run-pass
// This test illustrates that under NLL, we can remove our overly
// conservative approach for disallowing mutations of match inputs.

// See further discussion on rust-lang/rust#24535,
// rust-lang/rfcs#1006, and rust-lang/rfcs#107

#![feature(bind_by_move_pattern_guards)]

fn main() {
    rust_issue_24535();
    rfcs_issue_1006_1();
    rfcs_issue_1006_2();
}

fn rust_issue_24535() {
    fn compare(a: &u8, b: &mut u8) -> bool {
        a == b
    }

    let a = 3u8;

    match a {
        0 => panic!("nope"),
        3 if compare(&a, &mut 3) => (),
        _ => panic!("nope"),
    }
}

fn rfcs_issue_1006_1() {
    let v = vec!["1".to_string(), "2".to_string(), "3".to_string()];
    match Some(&v) {
        Some(iv) if iv.iter().any(|x| &x[..]=="2") => true,
        _ => panic!("nope"),
    };
}

fn rfcs_issue_1006_2() {
    #[inline(always)]
    fn check<'a, I: Iterator<Item=&'a i32>>(mut i: I) -> bool {
        i.any(|&x| x == 2)
    }

    let slice = [1, 2, 3];

    match 42 {
        _ if slice.iter().any(|&x| x == 2) => { true },
        _ => { panic!("nope"); }
    };

    // (This match is just illustrating how easy it was to circumvent
    // the checking performed for the previous `match`.)
    match 42 {
        _ if check(slice.iter()) => { true },
        _ => { panic!("nope"); }
    };
}
