about summary refs log tree commit diff
path: root/src/tools/clippy/tests/ui/useless_nonzero_new_unchecked.rs
blob: c90a63915efb8b5a1b39ced37a7d9e2a0a6880d8 (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
#![warn(clippy::useless_nonzero_new_unchecked)]

use std::num::{NonZero, NonZeroUsize};

#[clippy::msrv = "1.83"]
const fn func() -> NonZeroUsize {
    const { unsafe { NonZeroUsize::new_unchecked(3) } }
    //~^ useless_nonzero_new_unchecked
}

#[clippy::msrv = "1.82"]
const fn func_older() -> NonZeroUsize {
    unsafe { NonZeroUsize::new_unchecked(3) }
}

const fn func_performance_hit_if_linted() -> NonZeroUsize {
    unsafe { NonZeroUsize::new_unchecked(3) }
}

const fn func_may_panic_at_run_time_if_linted(x: usize) -> NonZeroUsize {
    unsafe { NonZeroUsize::new_unchecked(x) }
}

macro_rules! uns {
    ($expr:expr) => {
        unsafe { $expr }
    };
}

macro_rules! nzu {
    () => {
        NonZeroUsize::new_unchecked(1)
    };
}

fn main() {
    const _A: NonZeroUsize = unsafe { NonZeroUsize::new_unchecked(3) };
    //~^ useless_nonzero_new_unchecked

    static _B: NonZero<u8> = unsafe { NonZero::<u8>::new_unchecked(42) };
    //~^ useless_nonzero_new_unchecked

    const _C: usize = unsafe { NonZeroUsize::new_unchecked(3).get() };
    //~^ useless_nonzero_new_unchecked

    const AUX: usize = 3;
    const _D: NonZeroUsize = unsafe { NonZeroUsize::new_unchecked(AUX) };
    //~^ useless_nonzero_new_unchecked

    const _X: NonZeroUsize = uns!(NonZeroUsize::new_unchecked(3));
    const _Y: NonZeroUsize = unsafe { nzu!() };
}