}
err_out_of_scope(super_scope, sub_scope, cause) => {
- let (value_kind, value_msg, is_temporary) = match err.cmt.cat {
+ let (value_kind, value_msg) = match err.cmt.cat {
mc::Categorization::Rvalue(_) =>
- ("temporary value", "temporary value created here", true),
+ ("temporary value", "temporary value created here"),
_ =>
- ("borrowed value", "does not live long enough", false)
+ ("borrowed value", "borrow occurs here")
};
let is_closure = match cause {
Some(primary) => {
db.span = MultiSpan::from_span(s);
db.span_label(primary, &format!("capture occurs here"));
- db.span_label(s, &value_msg);
+ db.span_label(s, &"does not live long enough");
true
}
None => false
}
}
_ => {
- db.span_label(error_span, &value_msg);
+ db.span_label(error_span, &"does not live long enough");
false
}
};
match (sub_span, super_span) {
(Some(s1), Some(s2)) if s1 == s2 => {
- if !is_temporary && !is_closure {
+ if !is_closure {
db.span = MultiSpan::from_span(s1);
- db.span_label(error_span, &format!("borrow occurs here"));
+ db.span_label(error_span, &value_msg);
let msg = match opt_loan_path(&err.cmt) {
- None => "borrowed value".to_string(),
+ None => value_kind.to_string(),
Some(lp) => {
format!("`{}`", self.loan_path_to_string(&lp))
}
db.note("values in a scope are dropped in the opposite order \
they are created");
}
- (Some(s1), Some(s2)) if !is_temporary && !is_closure => {
+ (Some(s1), Some(s2)) if !is_closure => {
db.span = MultiSpan::from_span(s2);
- db.span_label(error_span, &format!("borrow occurs here"));
+ db.span_label(error_span, &value_msg);
let msg = match opt_loan_path(&err.cmt) {
- None => "borrowed value".to_string(),
+ None => value_kind.to_string(),
Some(lp) => {
format!("`{}`", self.loan_path_to_string(&lp))
}
};
- db.span_label(s2,
- &format!("{} dropped here while still borrowed", msg));
+ db.span_label(s2, &format!("{} dropped here while still borrowed", msg));
db.span_label(s1, &format!("{} needs to live until here", value_kind));
}
_ => {
+++ /dev/null
-// 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 main() {
- let v = vec![
- &3
-//~^ ERROR borrowed value does not live long enough
- ];
-
- for &&x in &v {
- println!("{}", x + 3);
- }
-}
+++ /dev/null
-// 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.
-
-#![feature(box_syntax)]
-
-trait Foo { }
-
-impl<'a> Foo for &'a isize { }
-
-fn main() {
- let blah;
- {
- let ss: &isize = &1; //~ ERROR borrowed value does not live long enough
- blah = box ss as Box<Foo>;
- }
-}
+++ /dev/null
-// 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.
-
-// Test slicing expressions doesn't defeat the borrow checker.
-
-fn main() {
- let y;
- {
- let x: &[isize] = &[1, 2, 3, 4, 5]; //~ ERROR borrowed value does not live long enough
- y = &x[1..];
- }
-}
error: borrowed value does not live long enough
- --> $DIR/borrowck-let-suggestion.rs:12:13
+ --> $DIR/borrowck-let-suggestion.rs:12:23
|
12 | let x = [1].iter();
- | ^^^ - temporary value only lives until here
+ | --- ^ temporary value dropped here while still borrowed
| |
| temporary value created here
13 | }
= note: values in a scope are dropped in the opposite order they are created
error: borrowed value does not live long enough
- --> $DIR/borrowck-let-suggestion-suffixes.rs:24:14
+ --> $DIR/borrowck-let-suggestion-suffixes.rs:24:18
|
24 | v3.push(&'x'); // statement 6
- | ^^^ - temporary value only lives until here
+ | --- ^ temporary value dropped here while still borrowed
| |
| temporary value created here
...
= note: consider using a `let` binding to increase its lifetime
error: borrowed value does not live long enough
- --> $DIR/borrowck-let-suggestion-suffixes.rs:34:18
+ --> $DIR/borrowck-let-suggestion-suffixes.rs:34:22
|
34 | v4.push(&'y');
- | ^^^ - temporary value only lives until here
+ | --- ^ temporary value dropped here while still borrowed
| |
| temporary value created here
...
= note: consider using a `let` binding to increase its lifetime
error: borrowed value does not live long enough
- --> $DIR/borrowck-let-suggestion-suffixes.rs:45:14
+ --> $DIR/borrowck-let-suggestion-suffixes.rs:45:18
|
45 | v5.push(&'z');
- | ^^^ - temporary value only lives until here
+ | --- ^ temporary value dropped here while still borrowed
| |
| temporary value created here
...
--- /dev/null
+// 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 main() {
+ let v = vec![
+ &3
+ ];
+
+ for &&x in &v {
+ println!("{}", x + 3);
+ }
+}
--- /dev/null
+error: borrowed value does not live long enough
+ --> $DIR/issue-15480.rs:14:6
+ |
+13 | &3
+ | - temporary value created here
+14 | ];
+ | ^ temporary value dropped here while still borrowed
+...
+19 | }
+ | - temporary value needs to live until here
+ |
+ = note: consider using a `let` binding to increase its lifetime
+
+error: aborting due to previous error
+
--- /dev/null
+// 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.
+
+#![feature(box_syntax)]
+
+trait Foo { }
+
+impl<'a> Foo for &'a isize { }
+
+fn main() {
+ let blah;
+ {
+ let ss: &isize = &1;
+ blah = box ss as Box<Foo>;
+ }
+}
--- /dev/null
+error: borrowed value does not live long enough
+ --> $DIR/regions-close-over-borrowed-ref-in-obj.rs:22:5
+ |
+20 | let ss: &isize = &1;
+ | - temporary value created here
+21 | blah = box ss as Box<Foo>;
+22 | }
+ | ^ temporary value dropped here while still borrowed
+23 | }
+ | - temporary value needs to live until here
+
+error: aborting due to previous error
+
--- /dev/null
+// 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.
+
+// Test slicing expressions doesn't defeat the borrow checker.
+
+fn main() {
+ let y;
+ {
+ let x: &[isize] = &[1, 2, 3, 4, 5];
+ y = &x[1..];
+ }
+}
--- /dev/null
+error: borrowed value does not live long enough
+ --> $DIR/slice-borrow.rs:18:5
+ |
+16 | let x: &[isize] = &[1, 2, 3, 4, 5];
+ | --------------- temporary value created here
+17 | y = &x[1..];
+18 | }
+ | ^ temporary value dropped here while still borrowed
+19 | }
+ | - temporary value needs to live until here
+
+error: aborting due to previous error
+