Skip to content

Commit 9018807

Browse files
authored
Rollup merge of rust-lang#53326 - memoryruins:issue-27868-test, r=nikomatsakis
[nll] add regression test for issue rust-lang#27868 Adds a test for rust-lang#27868 ``Inconsistent evaluation order for assignment operations`` apart of rust-lang#47366 ``tracking issue for bugs fixed by the MIR borrow checker or NLL`` r? @nikomatsakis
2 parents c3b7483 + e390182 commit 9018807

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

src/test/ui/nll/issue-27868.rs

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
}

src/test/ui/nll/issue-27868.stderr

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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`.

0 commit comments

Comments
 (0)