File tree Expand file tree Collapse file tree 2 files changed +58
-0
lines changed Expand file tree Collapse file tree 2 files changed +58
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // Regression test for issue #27868
12+
13+ #![ feature( nll) ]
14+
15+ use std:: ops:: AddAssign ;
16+
17+ struct MyVec < T > ( Vec < T > ) ;
18+
19+ impl < T > Drop for MyVec < T > {
20+ fn drop ( & mut self ) {
21+ println ! ( "Being dropped." ) ;
22+ }
23+ }
24+
25+ impl < T > AddAssign < T > for MyVec < T > {
26+ fn add_assign ( & mut self , _elem : T ) {
27+ println ! ( "In add_assign." ) ;
28+ }
29+ }
30+
31+ fn main ( ) {
32+ let mut vec = MyVec ( vec ! [ 0 ] ) ;
33+ let mut vecvec = vec ! [ vec] ;
34+
35+ vecvec[ 0 ] += {
36+ vecvec = vec ! [ ] ;
37+ //~^ ERROR cannot assign to `vecvec` because it is borrowed [E0506]
38+ 0
39+ } ;
40+ }
Original file line number Diff line number Diff line change 1+ error[E0506]: cannot assign to `vecvec` because it is borrowed
2+ --> $DIR/issue-27868.rs:36:9
3+ |
4+ LL | vecvec[0] += {
5+ | ------
6+ | |
7+ | _____borrow of `vecvec` occurs here
8+ | |
9+ LL | | vecvec = vec![];
10+ | | ^^^^^^ assignment to borrowed `vecvec` occurs here
11+ LL | | //~^ ERROR cannot assign to `vecvec` because it is borrowed [E0506]
12+ LL | | 0
13+ LL | | };
14+ | |_____- borrow later used here
15+
16+ error: aborting due to previous error
17+
18+ For more information about this error, try `rustc --explain E0506`.
You can’t perform that action at this time.
0 commit comments