]> git.lizzy.rs Git - rust.git/blob - src/test/ui/borrowck/two-phase-reservation-sharing-interference-2.rs
Auto merge of #54624 - arielb1:evaluate-outlives, r=nikomatsakis
[rust.git] / src / test / ui / borrowck / two-phase-reservation-sharing-interference-2.rs
1 // Copyright 2017 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 // compile-flags: -Z borrowck=mir -Z two-phase-borrows
12
13 // This is similar to two-phase-reservation-sharing-interference.rs
14 // in that it shows a reservation that overlaps with a shared borrow.
15 //
16 // Currently, this test fails with lexical lifetimes, but succeeds
17 // with non-lexical lifetimes. (The reason is because the activation
18 // of the mutable borrow ends up overlapping with a lexically-scoped
19 // shared borrow; but a non-lexical shared borrow can end before the
20 // activation occurs.)
21 //
22 // So this test is just making a note of the current behavior.
23
24 #![feature(rustc_attrs)]
25
26 #[rustc_error]
27 fn main() { //~ ERROR compilation successful
28     let mut v = vec![0, 1, 2];
29     let shared = &v;
30
31     v.push(shared.len());
32
33     assert_eq!(v, [0, 1, 2, 3]);
34 }