Skip to content

Commit 3b4ed18

Browse files
committed
add test case showing how previous attempt was unsound
1 parent 67c96ed commit 3b4ed18

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2014 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 a bug in #52713: this was an optimization for
12+
// computing liveness that wound up accidentally causing the program
13+
// below to be accepted.
14+
15+
#![feature(nll)]
16+
17+
fn foo<'a>(x: &'a mut u32) -> u32 {
18+
let mut x = 22;
19+
let y = &x;
20+
if false {
21+
return x;
22+
}
23+
24+
x += 1; //~ ERROR
25+
println!("{}", y);
26+
return 0;
27+
}
28+
29+
fn main() { }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
error[E0506]: cannot assign to `x` because it is borrowed
2+
--> $DIR/issue-52713-bug.rs:24:5
3+
|
4+
LL | let y = &x;
5+
| -- borrow of `x` occurs here
6+
...
7+
LL | x += 1; //~ ERROR
8+
| ^^^^^^ assignment to borrowed `x` occurs here
9+
LL | println!("{}", y);
10+
| - borrow later used here
11+
12+
error: aborting due to previous error
13+
14+
For more information about this error, try `rustc --explain E0506`.

0 commit comments

Comments
 (0)