]> git.proxmox.com Git - rustc.git/blame - src/tools/clippy/tests/ui/manual_slice_size_calculation.rs
New upstream version 1.71.1+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / manual_slice_size_calculation.rs
CommitLineData
49aad941
FG
1//@run-rustfix
2//@aux-build:proc_macros.rs
353b0b11
FG
3#![allow(unused)]
4#![warn(clippy::manual_slice_size_calculation)]
5
49aad941
FG
6extern crate proc_macros;
7
353b0b11 8use core::mem::{align_of, size_of};
49aad941 9use proc_macros::external;
353b0b11
FG
10
11fn main() {
12 let v_i32 = Vec::<i32>::new();
13 let s_i32 = v_i32.as_slice();
14
15 // True positives:
16 let _ = s_i32.len() * size_of::<i32>(); // WARNING
17 let _ = size_of::<i32>() * s_i32.len(); // WARNING
18 let _ = size_of::<i32>() * s_i32.len() * 5; // WARNING
19
20 let len = s_i32.len();
21 let size = size_of::<i32>();
22 let _ = len * size_of::<i32>(); // WARNING
23 let _ = s_i32.len() * size; // WARNING
24 let _ = len * size; // WARNING
25
49aad941
FG
26 let _ = external!(&[1u64][..]).len() * size_of::<u64>();
27
353b0b11
FG
28 // True negatives:
29 let _ = size_of::<i32>() + s_i32.len(); // Ok, not a multiplication
30 let _ = size_of::<i32>() * s_i32.partition_point(|_| true); // Ok, not len()
31 let _ = size_of::<i32>() * v_i32.len(); // Ok, not a slice
32 let _ = align_of::<i32>() * s_i32.len(); // Ok, not size_of()
33 let _ = size_of::<u32>() * s_i32.len(); // Ok, different types
34
49aad941
FG
35 let _ = external!($s_i32.len() * size_of::<i32>());
36 let _ = external!($s_i32.len()) * size_of::<i32>();
37
353b0b11
FG
38 // False negatives:
39 let _ = 5 * size_of::<i32>() * s_i32.len(); // Ok (MISSED OPPORTUNITY)
40 let _ = size_of::<i32>() * 5 * s_i32.len(); // Ok (MISSED OPPORTUNITY)
41}
42
43const fn _const(s_i32: &[i32]) {
44 // True negative:
45 let _ = s_i32.len() * size_of::<i32>(); // Ok, can't use size_of_val in const
46}