auto merge of #14350 : zwarich/rust/let-suggestion, r=pcwalton

This commit is contained in:
bors 2014-05-22 13:31:24 -07:00
commit e402e75f4e
2 changed files with 38 additions and 1 deletions

View File

@ -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 {

View 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();
}