File tree 9 files changed +139
-1
lines changed
9 files changed +139
-1
lines changed File renamed without changes.
Original file line number Diff line number Diff line change 1
1
error[E0506]: cannot assign to `self.container_field` because it is borrowed
2
- --> $DIR/issue-81365.rs:21:9
2
+ --> $DIR/issue-81365-1 .rs:21:9
3
3
|
4
4
LL | let first = &self.target_field;
5
5
| ---- borrow of `self.container_field` occurs here
Original file line number Diff line number Diff line change
1
+ use std:: ops:: Deref ;
2
+
3
+ struct DerefTarget {
4
+ target_field : bool ,
5
+ }
6
+ struct Container {
7
+ target : DerefTarget ,
8
+ container_field : bool ,
9
+ }
10
+
11
+ impl Deref for Container {
12
+ type Target = DerefTarget ;
13
+ fn deref ( & self ) -> & Self :: Target {
14
+ & self . target
15
+ }
16
+ }
17
+
18
+ impl Container {
19
+ fn bad_borrow ( & mut self ) {
20
+ let first = & self . deref ( ) . target_field ;
21
+ self . container_field = true ; //~ ERROR E0506
22
+ first;
23
+ }
24
+ }
25
+
26
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0506]: cannot assign to `self.container_field` because it is borrowed
2
+ --> $DIR/issue-81365-10.rs:21:9
3
+ |
4
+ LL | let first = &self.deref().target_field;
5
+ | ---- borrow of `self.container_field` occurs here
6
+ LL | self.container_field = true;
7
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.container_field` occurs here
8
+ LL | first;
9
+ | ----- borrow later used here
10
+
11
+ error: aborting due to previous error
12
+
13
+ For more information about this error, try `rustc --explain E0506`.
Original file line number Diff line number Diff line change
1
+ use std:: ops:: { Deref , DerefMut } ;
2
+
3
+ struct DerefTarget {
4
+ target_field : bool ,
5
+ }
6
+ struct Container {
7
+ target : DerefTarget ,
8
+ container_field : bool ,
9
+ }
10
+
11
+ impl Deref for Container {
12
+ type Target = DerefTarget ;
13
+ fn deref ( & self ) -> & Self :: Target {
14
+ & self . target
15
+ }
16
+ }
17
+
18
+ impl DerefMut for Container {
19
+ fn deref_mut ( & mut self ) -> & mut Self :: Target {
20
+ & mut self . target
21
+ }
22
+ }
23
+
24
+ impl Container {
25
+ fn bad_borrow ( & mut self ) {
26
+ let first = & mut self . target_field ;
27
+ self . container_field = true ; //~ ERROR E0506
28
+ first;
29
+ }
30
+ }
31
+
32
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0506]: cannot assign to `self.container_field` because it is borrowed
2
+ --> $DIR/issue-81365-11.rs:27:9
3
+ |
4
+ LL | let first = &mut self.target_field;
5
+ | ---- borrow of `self.container_field` occurs here
6
+ LL | self.container_field = true;
7
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.container_field` occurs here
8
+ LL | first;
9
+ | ----- borrow later used here
10
+
11
+ error: aborting due to previous error
12
+
13
+ For more information about this error, try `rustc --explain E0506`.
Original file line number Diff line number Diff line change
1
+ error[E0506]: cannot assign to `self.container_field` because it is borrowed
2
+ --> $DIR/issue-81365-8.rs:21:9
3
+ |
4
+ LL | let first = &(*self).target_field;
5
+ | ------- borrow of `self.container_field` occurs here
6
+ LL | self.container_field = true;
7
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.container_field` occurs here
8
+ LL | first;
9
+ | ----- borrow later used here
10
+ |
11
+ = note: borrow occurs due to deref coercion to `DerefTarget`
12
+
13
+ error: aborting due to previous error
14
+
15
+ For more information about this error, try `rustc --explain E0506`.
Original file line number Diff line number Diff line change
1
+ use std:: ops:: Deref ;
2
+
3
+ struct DerefTarget {
4
+ target_field : bool ,
5
+ }
6
+ struct Container {
7
+ target : DerefTarget ,
8
+ container_field : bool ,
9
+ }
10
+
11
+ impl Deref for Container {
12
+ type Target = DerefTarget ;
13
+ fn deref ( & self ) -> & Self :: Target {
14
+ & self . target
15
+ }
16
+ }
17
+
18
+ impl Container {
19
+ fn bad_borrow ( & mut self ) {
20
+ let first = & Deref :: deref ( self ) . target_field ;
21
+ self . container_field = true ; //~ ERROR E0506
22
+ first;
23
+ }
24
+ }
25
+
26
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0506]: cannot assign to `self.container_field` because it is borrowed
2
+ --> $DIR/issue-81365-9.rs:21:9
3
+ |
4
+ LL | let first = &Deref::deref(self).target_field;
5
+ | ---- borrow of `self.container_field` occurs here
6
+ LL | self.container_field = true;
7
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.container_field` occurs here
8
+ LL | first;
9
+ | ----- borrow later used here
10
+
11
+ error: aborting due to previous error
12
+
13
+ For more information about this error, try `rustc --explain E0506`.
You can’t perform that action at this time.
0 commit comments