Fix ICE when a borrow is used after drop

ht @nickfrostatx for the first initial patch
This commit is contained in:
Santiago Pastorino 2018-04-09 12:42:17 -03:00
parent 4b9b70c394
commit 2e87dbbde1
No known key found for this signature in database
GPG key ID: 88C941CDA1D46432
3 changed files with 66 additions and 10 deletions

View file

@ -0,0 +1,26 @@
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![allow(warnings)]
#![feature(nll)]
use std::collections::BinaryHeap;
fn main() {
let mut heap: BinaryHeap<i32> = BinaryHeap::new();
let borrow = heap.peek_mut();
match (borrow, ()) {
(Some(_), ()) => {
println!("{:?}", heap); //~ ERROR cannot borrow `heap` as immutable
}
_ => {}
};
}

View file

@ -0,0 +1,18 @@
error[E0502]: cannot borrow `heap` as immutable because it is also borrowed as mutable
--> $DIR/issue-47646.rs:22:30
|
LL | let borrow = heap.peek_mut();
| ---- mutable borrow occurs here
LL |
LL | match (borrow, ()) {
| ------------ borrow may end up in a temporary, created here
LL | (Some(_), ()) => {
LL | println!("{:?}", heap); //~ ERROR cannot borrow `heap` as immutable
| ^^^^ immutable borrow occurs here
...
LL | };
| - temporary later dropped here, potentially using the reference
error: aborting due to previous error
For more information about this error, try `rustc --explain E0502`.