### What it does
Checks for casts of a function pointer to a numeric type not wide enough to
store address.

### Why is this bad?
Such a cast discards some bits of the function's address. If this is intended, it would be more
clearly expressed by casting to usize first, then casting the usize to the intended type (with
a comment) to perform the truncation.

### Example
```
fn fn1() -> i16 {
    1
};
let _ = fn1 as i32;
```

Use instead:
```
// Cast to usize first, then comment with the reason for the truncation
fn fn1() -> i16 {
    1
};
let fn_ptr = fn1 as usize;
let fn_ptr_truncated = fn_ptr as i32;
```