summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/unnecessary_cast.fixed
blob: 2f7e2997e739d50ec990455b60cbf898820ad2bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// run-rustfix
#![warn(clippy::unnecessary_cast)]
#![allow(
    unused_must_use,
    clippy::borrow_as_ptr,
    clippy::no_effect,
    clippy::nonstandard_macro_braces,
    clippy::unnecessary_operation
)]

#[rustfmt::skip]
fn main() {
    // Test cast_unnecessary
    1_i32;
    1_f32;
    false;
    &1i32 as &i32;

    -1_i32;
    - 1_i32;
    -1_f32;
    1_i32;
    1_f32;

    // macro version
    macro_rules! foo {
        ($a:ident, $b:ident) => {
            #[allow(unused)]
            pub fn $a() -> $b {
                1 as $b
            }
        };
    }
    foo!(a, i32);
    foo!(b, f32);
    foo!(c, f64);

    // do not lint cast to cfg-dependant type
    1 as std::os::raw::c_char;

    // do not lint cast to alias type
    1 as I32Alias;
    &1 as &I32Alias;

    // issue #9960
    macro_rules! bind_var {
        ($id:ident, $e:expr) => {{
            let $id = 0usize;
            let _ = $e != 0usize;
            let $id = 0isize;
            let _ = $e != 0usize;
        }}
    }
    bind_var!(x, (x as usize) + 1);
}

type I32Alias = i32;

mod fixable {
    #![allow(dead_code)]

    fn main() {
        // casting integer literal to float is unnecessary
        100_f32;
        100_f64;
        100_f64;
        let _ = -100_f32;
        let _ = -100_f64;
        let _ = -100_f64;
        100_f32;
        100_f64;
        // Should not trigger
        #[rustfmt::skip]
        let v = vec!(1);
        &v as &[i32];
        0x10 as f32;
        0o10 as f32;
        0b10 as f32;
        0x11 as f64;
        0o11 as f64;
        0b11 as f64;

        1_u32;
        0x10_i32;
        0b10_usize;
        0o73_u16;
        1_000_000_000_u32;

        1.0_f64;
        0.5_f32;

        1.0 as u16;

        let _ = -1_i32;
        let _ = -1.0_f32;

        let _ = 1 as I32Alias;
        let _ = &1 as &I32Alias;

        let x = 1i32;
        let _ = &{ x };
    }

    type I32Alias = i32;

    fn issue_9380() {
        let _: i32 = -1_i32;
        let _: f32 = -(1) as f32;
        let _: i64 = -1_i64;
        let _: i64 = -(1.0) as i64;

        let _ = -(1 + 1) as i64;
    }

    fn issue_9563() {
        let _: f64 = (-8.0_f64).exp();
        #[allow(clippy::precedence)]
        let _: f64 = -8.0_f64.exp(); // should suggest `-8.0_f64.exp()` here not to change code behavior
    }

    fn issue_9562_non_literal() {
        fn foo() -> f32 {
            0.
        }

        let _num = foo();
    }

    fn issue_9603() {
        let _: f32 = -0x400 as f32;
    }
}