File tree Expand file tree Collapse file tree 9 files changed +139
-1
lines changed Expand file tree Collapse file tree 9 files changed +139
-1
lines changed File renamed without changes.
Original file line number Diff line number Diff line change 11error[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
33 |
44LL | let first = &self.target_field;
55 | ---- 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