auto merge of #14350 : zwarich/rust/let-suggestion, r=pcwalton
This commit is contained in:
commit
e402e75f4e
@ -689,11 +689,16 @@ impl<'a> BorrowckCtxt<'a> {
|
||||
"reference must be valid for ",
|
||||
sub_scope,
|
||||
"...");
|
||||
let suggestion = if is_statement_scope(self.tcx, super_scope) {
|
||||
"; consider using a `let` binding to increase its lifetime"
|
||||
} else {
|
||||
""
|
||||
};
|
||||
note_and_explain_region(
|
||||
self.tcx,
|
||||
"...but borrowed value is only valid for ",
|
||||
super_scope,
|
||||
"");
|
||||
suggestion);
|
||||
}
|
||||
|
||||
err_borrowed_pointer_too_short(loan_scope, ptr_scope, _) => {
|
||||
@ -779,6 +784,18 @@ impl<'a> BorrowckCtxt<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn is_statement_scope(tcx: &ty::ctxt, region: ty::Region) -> bool {
|
||||
match region {
|
||||
ty::ReScope(node_id) => {
|
||||
match tcx.map.find(node_id) {
|
||||
Some(ast_map::NodeStmt(_)) => true,
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
|
||||
impl DataFlowOperator for LoanDataFlowOperator {
|
||||
#[inline]
|
||||
fn initial_value(&self) -> bool {
|
||||
|
20
src/test/compile-fail/borrowck-let-suggestion.rs
Normal file
20
src/test/compile-fail/borrowck-let-suggestion.rs
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright 2014 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.
|
||||
|
||||
fn f() {
|
||||
let x = [1].iter(); //~ ERROR borrowed value does not live long enough
|
||||
//~^^ NOTE reference must be valid for the block
|
||||
//~^^ NOTE consider using a `let` binding to increase its lifetime
|
||||
}
|
||||
|
||||
fn main() {
|
||||
f();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user