Merge pull request #2814 from VKlayd/fn_to_int
WIP: Add lint on cast Fn to all numerical except usize.
This commit is contained in:
commit
1e1b4e26ea
4 changed files with 158 additions and 1 deletions
22
tests/ui/types_fn_to_int.rs
Normal file
22
tests/ui/types_fn_to_int.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
enum Foo {
|
||||
A(usize),
|
||||
B
|
||||
}
|
||||
|
||||
fn bar() -> i32 {
|
||||
0i32
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x = Foo::A;
|
||||
let _y = x as i32;
|
||||
let _y1 = Foo::A as i32;
|
||||
let _y = x as u32;
|
||||
let _z = bar as u32;
|
||||
let _y = bar as i64;
|
||||
let _y = bar as u64;
|
||||
let _z = Foo::A as i128;
|
||||
let _z = Foo::A as u128;
|
||||
let _z = bar as i128;
|
||||
let _z = bar as u128;
|
||||
}
|
||||
66
tests/ui/types_fn_to_int.stderr
Normal file
66
tests/ui/types_fn_to_int.stderr
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
error: casting a `fn(usize) -> Foo {Foo::A}` to `i32` may truncate the function address value.
|
||||
--> $DIR/types_fn_to_int.rs:12:14
|
||||
|
|
||||
12 | let _y = x as i32;
|
||||
| ^^^^^^^^ help: if you need the address of the function, consider: `x as usize`
|
||||
|
|
||||
= note: #[deny(fn_to_numeric_cast_with_truncation)] on by default
|
||||
|
||||
error: casting a `fn(usize) -> Foo {Foo::A}` to `i32` may truncate the function address value.
|
||||
--> $DIR/types_fn_to_int.rs:13:15
|
||||
|
|
||||
13 | let _y1 = Foo::A as i32;
|
||||
| ^^^^^^^^^^^^^ help: if you need the address of the function, consider: `Foo::A as usize`
|
||||
|
||||
error: casting a `fn(usize) -> Foo {Foo::A}` to `u32` may truncate the function address value.
|
||||
--> $DIR/types_fn_to_int.rs:14:14
|
||||
|
|
||||
14 | let _y = x as u32;
|
||||
| ^^^^^^^^ help: if you need the address of the function, consider: `x as usize`
|
||||
|
||||
error: casting a `fn() -> i32 {bar}` to `u32` may truncate the function address value.
|
||||
--> $DIR/types_fn_to_int.rs:15:14
|
||||
|
|
||||
15 | let _z = bar as u32;
|
||||
| ^^^^^^^^^^ help: if you need the address of the function, consider: `bar as usize`
|
||||
|
||||
error: casting a `fn() -> i32 {bar}` to `i64` may truncate the function address value.
|
||||
--> $DIR/types_fn_to_int.rs:16:14
|
||||
|
|
||||
16 | let _y = bar as i64;
|
||||
| ^^^^^^^^^^ help: if you need the address of the function, consider: `bar as usize`
|
||||
|
||||
error: casting a `fn() -> i32 {bar}` to `u64` is bad style.
|
||||
--> $DIR/types_fn_to_int.rs:17:14
|
||||
|
|
||||
17 | let _y = bar as u64;
|
||||
| ^^^^^^^^^^ help: if you need the address of the function, consider: `bar as usize`
|
||||
|
|
||||
= note: `-D fn-to-numeric-cast` implied by `-D warnings`
|
||||
|
||||
error: casting a `fn(usize) -> Foo {Foo::A}` to `i128` is bad style.
|
||||
--> $DIR/types_fn_to_int.rs:18:14
|
||||
|
|
||||
18 | let _z = Foo::A as i128;
|
||||
| ^^^^^^^^^^^^^^ help: if you need the address of the function, consider: `Foo::A as usize`
|
||||
|
||||
error: casting a `fn(usize) -> Foo {Foo::A}` to `u128` is bad style.
|
||||
--> $DIR/types_fn_to_int.rs:19:14
|
||||
|
|
||||
19 | let _z = Foo::A as u128;
|
||||
| ^^^^^^^^^^^^^^ help: if you need the address of the function, consider: `Foo::A as usize`
|
||||
|
||||
error: casting a `fn() -> i32 {bar}` to `i128` is bad style.
|
||||
--> $DIR/types_fn_to_int.rs:20:14
|
||||
|
|
||||
20 | let _z = bar as i128;
|
||||
| ^^^^^^^^^^^ help: if you need the address of the function, consider: `bar as usize`
|
||||
|
||||
error: casting a `fn() -> i32 {bar}` to `u128` is bad style.
|
||||
--> $DIR/types_fn_to_int.rs:21:14
|
||||
|
|
||||
21 | let _z = bar as u128;
|
||||
| ^^^^^^^^^^^ help: if you need the address of the function, consider: `bar as usize`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue