]> git.proxmox.com Git - rustc.git/blob - src/tools/clippy/tests/ui/needless_borrow.rs
New upstream version 1.59.0+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / needless_borrow.rs
1 // run-rustfix
2
3 #[warn(clippy::all, clippy::needless_borrow)]
4 #[allow(unused_variables, clippy::unnecessary_mut_passed)]
5 fn main() {
6 let a = 5;
7 let ref_a = &a;
8 let _ = x(&a); // no warning
9 let _ = x(&&a); // warn
10
11 let mut b = 5;
12 mut_ref(&mut b); // no warning
13 mut_ref(&mut &mut b); // warn
14
15 let s = &String::from("hi");
16 let s_ident = f(&s); // should not error, because `&String` implements Copy, but `String` does not
17 let g_val = g(&Vec::new()); // should not error, because `&Vec<T>` derefs to `&[T]`
18 let vec = Vec::new();
19 let vec_val = g(&vec); // should not error, because `&Vec<T>` derefs to `&[T]`
20 h(&"foo"); // should not error, because the `&&str` is required, due to `&Trait`
21 let garbl = match 42 {
22 44 => &a,
23 45 => {
24 println!("foo");
25 &&a
26 },
27 46 => &&a,
28 47 => {
29 println!("foo");
30 loop {
31 println!("{}", a);
32 if a == 25 {
33 break &ref_a;
34 }
35 }
36 },
37 _ => panic!(),
38 };
39
40 let _ = x(&&&a);
41 let _ = x(&mut &&a);
42 let _ = x(&&&mut b);
43 let _ = x(&&ref_a);
44 {
45 let b = &mut b;
46 x(&b);
47 }
48 }
49
50 #[allow(clippy::needless_borrowed_reference)]
51 fn x(y: &i32) -> i32 {
52 *y
53 }
54
55 fn mut_ref(y: &mut i32) {
56 *y = 5;
57 }
58
59 fn f<T: Copy>(y: &T) -> T {
60 *y
61 }
62
63 fn g(y: &[u8]) -> u8 {
64 y[0]
65 }
66
67 trait Trait {}
68
69 impl<'a> Trait for &'a str {}
70
71 fn h(_: &dyn Trait) {}