| //@ check-pass | |
| //@ run-rustfix | |
| extern "C" { | |
| fn test(); | |
| } | |
| fn a() {} | |
| extern "C" fn c() {} | |
| extern "C" fn args(_a: i32) -> i32 { 0 } | |
| struct A { | |
| f: fn(), | |
| } | |
| fn main() { | |
| let f: fn() = a; | |
| let g: fn() = f; | |
| let a1 = A { f }; | |
| let a2 = A { f }; | |
| let _ = std::ptr::fn_addr_eq(f, a as fn()); | |
| //~^ WARN function pointer comparisons | |
| let _ = !std::ptr::fn_addr_eq(f, a as fn()); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(f, g); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(f, f); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(g, g); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(g, g); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(g, g); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(a as fn(), g); | |
| //~^ WARN function pointer comparisons | |
| let cfn: extern "C" fn() = c; | |
| let _ = std::ptr::fn_addr_eq(cfn, c as extern "C" fn()); | |
| //~^ WARN function pointer comparisons | |
| let argsfn: extern "C" fn(i32) -> i32 = args; | |
| let _ = std::ptr::fn_addr_eq(argsfn, args as extern "C" fn(i32) -> i32); | |
| //~^ WARN function pointer comparisons | |
| let t: unsafe extern "C" fn() = test; | |
| let _ = std::ptr::fn_addr_eq(t, test as unsafe extern "C" fn()); | |
| //~^ WARN function pointer comparisons | |
| let _ = std::ptr::fn_addr_eq(a1.f, a2.f); | |
| //~^ WARN function pointer comparisons | |
| } |