rust/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs

48 lines
1.1 KiB
Rust

// run-pass
// The actual regression test from #63479. (Including this because my
// first draft at fn-ptr-is-structurally-matchable.rs failed to actually
// cover the case this hit; I've since expanded it accordingly, but the
// experience left me wary of leaving this regression test out.)
#![warn(pointer_structural_match)]
#[derive(Eq)]
struct A {
a: i64
}
impl PartialEq for A {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.a.eq(&other.a)
}
}
type Fn = fn(&[A]);
fn my_fn(_args: &[A]) {
println!("hello world");
}
const TEST: Fn = my_fn;
const TEST2: (Fn, u8) = (TEST, 0);
struct B(Fn);
fn main() {
let s = B(my_fn);
match s {
B(TEST) => println!("matched"),
//~^ WARN behave unpredictably
//~| WARN this was previously accepted by the compiler but is being phased out
_ => panic!("didn't match")
};
match (s.0, 0) {
TEST2 => println!("matched"),
//~^ WARN behave unpredictably
//~| WARN this was previously accepted by the compiler but is being phased out
_ => panic!("didn't match")
}
}