Fix ICE when a borrow is used after drop
ht @nickfrostatx for the first initial patch
This commit is contained in:
parent
4b9b70c394
commit
2e87dbbde1
3 changed files with 66 additions and 10 deletions
26
src/test/ui/issue-47646.rs
Normal file
26
src/test/ui/issue-47646.rs
Normal 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
|
||||
}
|
||||
_ => {}
|
||||
};
|
||||
}
|
||||
18
src/test/ui/issue-47646.stderr
Normal file
18
src/test/ui/issue-47646.stderr
Normal 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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue