提交 516a1772 编写于 作者: C Cameron Zwarich

Add a suggestion to use a `let` binding on some borrowck errors.

上级 f78eb143
......@@ -689,11 +689,16 @@ pub fn note_and_explain_bckerr(&self, err: BckError) {
"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 @@ pub fn cmt_to_str(&self, cmt: &mc::cmt_) -> StrBuf {
}
}
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 {
......
// 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();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册