File tree Expand file tree Collapse file tree 6 files changed +92
-22
lines changed
Expand file tree Collapse file tree 6 files changed +92
-22
lines changed Original file line number Diff line number Diff line change @@ -346,6 +346,7 @@ fn compile_test() {
346346
347347const RUSTFIX_COVERAGE_KNOWN_EXCEPTIONS : & [ & str ] = & [
348348 "assign_ops2.rs" ,
349+ "borrow_deref_ref_unfixable.rs" ,
349350 "cast_size_32bit.rs" ,
350351 "char_lit_as_u8.rs" ,
351352 "cmp_owned/without_suggestion.rs" ,
Original file line number Diff line number Diff line change 1+ // run-rustfix
2+
3+ #![ allow( dead_code, unused_variables) ]
4+
5+ fn main ( ) { }
6+
7+ mod should_lint {
8+ fn one_help ( ) {
9+ let a = & 12 ;
10+ let b = a;
11+
12+ let b = & mut bar ( & 12 ) ;
13+ }
14+
15+ fn bar ( x : & u32 ) -> & u32 {
16+ x
17+ }
18+ }
19+
20+ // this mod explains why we should not lint `&mut &* (&T)`
21+ mod should_not_lint1 {
22+ fn foo ( x : & mut & u32 ) {
23+ * x = & 1 ;
24+ }
25+
26+ fn main ( ) {
27+ let mut x = & 0 ;
28+ foo ( & mut & * x) ; // should not lint
29+ assert_eq ! ( * x, 0 ) ;
30+
31+ foo ( & mut x) ;
32+ assert_eq ! ( * x, 1 ) ;
33+ }
34+ }
35+
36+ // similar to should_not_lint1
37+ mod should_not_lint2 {
38+ struct S < ' a > {
39+ a : & ' a u32 ,
40+ b : u32 ,
41+ }
42+
43+ fn main ( ) {
44+ let s = S { a : & 1 , b : 1 } ;
45+ let x = & mut & * s. a ;
46+ * x = & 2 ;
47+ }
48+ }
49+
50+ // this mod explains why we should not lint `& &* (&T)`
51+ mod false_negative {
52+ fn foo ( ) {
53+ let x = & 12 ;
54+ let addr_x = & x as * const _ as usize ;
55+ let addr_y = & x as * const _ as usize ; // assert ok
56+ // let addr_y = &x as *const _ as usize; // assert fail
57+ assert_ne ! ( addr_x, addr_y) ;
58+ }
59+ }
Original file line number Diff line number Diff line change 55fn main ( ) { }
66
77mod should_lint {
8- fn foo ( ) {
8+ fn one_help ( ) {
99 let a = & 12 ;
1010 let b = & * a;
1111
12- let s = & String :: new ( ) ;
13- let x: & str = & * s;
14-
1512 let b = & mut & * bar ( & 12 ) ;
1613 }
1714
Original file line number Diff line number Diff line change @@ -7,31 +7,16 @@ LL | let b = &*a;
77 = note: `-D clippy::borrow-deref-ref` implied by `-D warnings`
88
99error: deref on an immutable reference
10- --> $DIR/borrow_deref_ref.rs:13:23
11- |
12- LL | let x: &str = &*s;
13- | ^^^
14- |
15- help: if you would like to reborrow, try removing `&*`
16- |
17- LL | let x: &str = s;
18- | ~
19- help: if you would like to deref, try using `&**`
20- |
21- LL | let x: &str = &**s;
22- | ~~~~
23-
24- error: deref on an immutable reference
25- --> $DIR/borrow_deref_ref.rs:15:22
10+ --> $DIR/borrow_deref_ref.rs:12:22
2611 |
2712LL | let b = &mut &*bar(&12);
2813 | ^^^^^^^^^^ help: if you would like to reborrow, try removing `&*`: `bar(&12)`
2914
3015error: deref on an immutable reference
31- --> $DIR/borrow_deref_ref.rs:58 :23
16+ --> $DIR/borrow_deref_ref.rs:55 :23
3217 |
3318LL | let addr_y = &&*x as *const _ as usize; // assert ok
3419 | ^^^ help: if you would like to reborrow, try removing `&*`: `x`
3520
36- error: aborting due to 4 previous errors
21+ error: aborting due to 3 previous errors
3722
Original file line number Diff line number Diff line change 1+ #![ allow( dead_code, unused_variables) ]
2+
3+ fn main ( ) { }
4+
5+ mod should_lint {
6+ fn two_helps ( ) {
7+ let s = & String :: new ( ) ;
8+ let x: & str = & * s;
9+ }
10+ }
Original file line number Diff line number Diff line change 1+ error: deref on an immutable reference
2+ --> $DIR/borrow_deref_ref_unfixable.rs:8:23
3+ |
4+ LL | let x: &str = &*s;
5+ | ^^^
6+ |
7+ = note: `-D clippy::borrow-deref-ref` implied by `-D warnings`
8+ help: if you would like to reborrow, try removing `&*`
9+ |
10+ LL | let x: &str = s;
11+ | ~
12+ help: if you would like to deref, try using `&**`
13+ |
14+ LL | let x: &str = &**s;
15+ | ~~~~
16+
17+ error: aborting due to previous error
18+
You can’t perform that action at this time.
0 commit comments