review comments: inline bindings and fix typo
This commit is contained in:
parent
53a711fdeb
commit
3c905d4ccd
16 changed files with 28 additions and 24 deletions
|
@ -721,11 +721,15 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||||
let tcx = self.infcx.tcx;
|
let tcx = self.infcx.tcx;
|
||||||
// Try to find predicates on *generic params* that would allow copying `ty`
|
// Try to find predicates on *generic params* that would allow copying `ty`
|
||||||
let infcx = tcx.infer_ctxt().build();
|
let infcx = tcx.infer_ctxt().build();
|
||||||
let clone_did = tcx.lang_items().clone_trait().unwrap();
|
if infcx
|
||||||
let params = ty::List::empty();
|
.type_implements_trait(
|
||||||
let ty = tcx.erase_regions(ty);
|
tcx.lang_items().clone_trait().unwrap(),
|
||||||
let env = self.param_env;
|
tcx.erase_regions(ty),
|
||||||
if infcx.type_implements_trait(clone_did, ty, params, env).must_apply_modulo_regions() {
|
ty::List::empty(),
|
||||||
|
self.param_env,
|
||||||
|
)
|
||||||
|
.must_apply_modulo_regions()
|
||||||
|
{
|
||||||
err.span_suggestion_verbose(
|
err.span_suggestion_verbose(
|
||||||
span.shrink_to_hi(),
|
span.shrink_to_hi(),
|
||||||
"consider cloning the value if the performance cost is acceptable",
|
"consider cloning the value if the performance cost is acceptable",
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | consume(b);
|
||||||
LL | consume(b);
|
LL | consume(b);
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `consume` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `consume` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/borrowck-consume-unsize-vec.rs:3:15
|
--> $DIR/borrowck-consume-unsize-vec.rs:3:15
|
||||||
|
|
|
|
||||||
LL | fn consume(_: Box<[i32]>) {
|
LL | fn consume(_: Box<[i32]>) {
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | consume(b);
|
||||||
LL | consume(b);
|
LL | consume(b);
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `consume` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `consume` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/borrowck-consume-upcast-box.rs:5:15
|
--> $DIR/borrowck-consume-upcast-box.rs:5:15
|
||||||
|
|
|
|
||||||
LL | fn consume(_: Box<dyn Foo>) {
|
LL | fn consume(_: Box<dyn Foo>) {
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | for _ in 0..3 {
|
||||||
LL | Other::handle(value);
|
LL | Other::handle(value);
|
||||||
| ^^^^^ value moved here, in previous iteration of loop
|
| ^^^^^ value moved here, in previous iteration of loop
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `handle` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `handle` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/mut-borrow-in-loop-2.rs:9:22
|
--> $DIR/mut-borrow-in-loop-2.rs:9:22
|
||||||
|
|
|
|
||||||
LL | fn handle(value: T) -> Self;
|
LL | fn handle(value: T) -> Self;
|
||||||
|
|
|
@ -9,7 +9,7 @@ LL | loop {
|
||||||
LL | take(x);
|
LL | take(x);
|
||||||
| ^ value moved here, in previous iteration of loop
|
| ^ value moved here, in previous iteration of loop
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `take` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `take` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/liveness-move-call-arg.rs:1:13
|
--> $DIR/liveness-move-call-arg.rs:1:13
|
||||||
|
|
|
|
||||||
LL | fn take(_x: Box<isize>) {}
|
LL | fn take(_x: Box<isize>) {}
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | send(ch, message);
|
||||||
LL | println!("{}", message);
|
LL | println!("{}", message);
|
||||||
| ^^^^^^^ value borrowed here after move
|
| ^^^^^^^ value borrowed here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `send` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `send` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/liveness-use-after-send.rs:3:54
|
--> $DIR/liveness-use-after-send.rs:3:54
|
||||||
|
|
|
|
||||||
LL | fn send<T:Send + std::fmt::Debug>(ch: Chan<T>, data: T) {
|
LL | fn send<T:Send + std::fmt::Debug>(ch: Chan<T>, data: T) {
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | loop {
|
||||||
LL | takes_fnonce(f);
|
LL | takes_fnonce(f);
|
||||||
| ^ value moved here, in previous iteration of loop
|
| ^ value moved here, in previous iteration of loop
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `takes_fnonce` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `takes_fnonce` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/borrow-closures-instead-of-move.rs:34:20
|
--> $DIR/borrow-closures-instead-of-move.rs:34:20
|
||||||
|
|
|
|
||||||
LL | fn takes_fnonce(_: impl FnOnce()) {}
|
LL | fn takes_fnonce(_: impl FnOnce()) {}
|
||||||
|
@ -32,7 +32,7 @@ LL | takes_fnonce(m);
|
||||||
LL | takes_fnonce(m);
|
LL | takes_fnonce(m);
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `takes_fnonce` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `takes_fnonce` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/borrow-closures-instead-of-move.rs:34:20
|
--> $DIR/borrow-closures-instead-of-move.rs:34:20
|
||||||
|
|
|
|
||||||
LL | fn takes_fnonce(_: impl FnOnce()) {}
|
LL | fn takes_fnonce(_: impl FnOnce()) {}
|
||||||
|
@ -58,7 +58,7 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
||||||
|
|
|
|
||||||
LL | x += 1;
|
LL | x += 1;
|
||||||
| ^
|
| ^
|
||||||
note: consider changing this parameter type in function `takes_fnonce` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `takes_fnonce` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/borrow-closures-instead-of-move.rs:34:20
|
--> $DIR/borrow-closures-instead-of-move.rs:34:20
|
||||||
|
|
|
|
||||||
LL | fn takes_fnonce(_: impl FnOnce()) {}
|
LL | fn takes_fnonce(_: impl FnOnce()) {}
|
||||||
|
|
|
@ -9,7 +9,7 @@ LL | (1, 2) if take(x) => (),
|
||||||
LL | (1, 2) if take(x) => (),
|
LL | (1, 2) if take(x) => (),
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `take` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `take` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/move-guard-same-consts.rs:25:15
|
--> $DIR/move-guard-same-consts.rs:25:15
|
||||||
|
|
|
|
||||||
LL | fn take<T>(_: T) -> bool { false }
|
LL | fn take<T>(_: T) -> bool { false }
|
||||||
|
|
|
@ -9,7 +9,7 @@ LL | (1, _) if take(x) => (),
|
||||||
LL | (_, 2) if take(x) => (),
|
LL | (_, 2) if take(x) => (),
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `take` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `take` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/move-in-guard-1.rs:15:15
|
--> $DIR/move-in-guard-1.rs:15:15
|
||||||
|
|
|
|
||||||
LL | fn take<T>(_: T) -> bool { false }
|
LL | fn take<T>(_: T) -> bool { false }
|
||||||
|
|
|
@ -7,7 +7,7 @@ LL | let x: Box<_> = Box::new(1);
|
||||||
LL | (_, 2) if take(x) => (),
|
LL | (_, 2) if take(x) => (),
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `take` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `take` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/move-in-guard-2.rs:13:15
|
--> $DIR/move-in-guard-2.rs:13:15
|
||||||
|
|
|
|
||||||
LL | fn take<T>(_: T) -> bool { false }
|
LL | fn take<T>(_: T) -> bool { false }
|
||||||
|
|
|
@ -108,7 +108,7 @@ LL | _ if guard(x) => 10,
|
||||||
LL | touch(&x);
|
LL | touch(&x);
|
||||||
| ^^ value borrowed here after move
|
| ^^ value borrowed here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `guard` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `guard` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/moves-based-on-type-exprs.rs:6:14
|
--> $DIR/moves-based-on-type-exprs.rs:6:14
|
||||||
|
|
|
|
||||||
LL | fn guard(_s: String) -> bool {panic!()}
|
LL | fn guard(_s: String) -> bool {panic!()}
|
||||||
|
|
|
@ -9,7 +9,7 @@ LL | move_out(x.f1_nocopy);
|
||||||
LL | move_out(x.f2_nocopy);
|
LL | move_out(x.f2_nocopy);
|
||||||
| ^^^^^^^^^^^ value used here after move
|
| ^^^^^^^^^^^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `move_out` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `move_out` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/union-move.rs:10:19
|
--> $DIR/union-move.rs:10:19
|
||||||
|
|
|
|
||||||
LL | fn move_out<T>(x: T) {}
|
LL | fn move_out<T>(x: T) {}
|
||||||
|
@ -28,7 +28,7 @@ LL | move_out(x.f2_nocopy);
|
||||||
LL | move_out(x.f3_copy);
|
LL | move_out(x.f3_copy);
|
||||||
| ^^^^^^^^^ value used here after move
|
| ^^^^^^^^^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `move_out` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `move_out` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/union-move.rs:10:19
|
--> $DIR/union-move.rs:10:19
|
||||||
|
|
|
|
||||||
LL | fn move_out<T>(x: T) {}
|
LL | fn move_out<T>(x: T) {}
|
||||||
|
|
|
@ -9,7 +9,7 @@ LL | move_out(x.f1_nocopy);
|
||||||
LL | move_out(x.f2_nocopy);
|
LL | move_out(x.f2_nocopy);
|
||||||
| ^^^^^^^^^^^ value used here after move
|
| ^^^^^^^^^^^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `move_out` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `move_out` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/union-move.rs:10:19
|
--> $DIR/union-move.rs:10:19
|
||||||
|
|
|
|
||||||
LL | fn move_out<T>(x: T) {}
|
LL | fn move_out<T>(x: T) {}
|
||||||
|
@ -28,7 +28,7 @@ LL | move_out(x.f2_nocopy);
|
||||||
LL | move_out(x.f3_copy);
|
LL | move_out(x.f3_copy);
|
||||||
| ^^^^^^^^^ value used here after move
|
| ^^^^^^^^^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `move_out` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `move_out` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/union-move.rs:10:19
|
--> $DIR/union-move.rs:10:19
|
||||||
|
|
|
|
||||||
LL | fn move_out<T>(x: T) {}
|
LL | fn move_out<T>(x: T) {}
|
||||||
|
|
|
@ -29,7 +29,7 @@ LL | drop_unsized(y);
|
||||||
LL | println!("{}", &y);
|
LL | println!("{}", &y);
|
||||||
| ^^ value borrowed here after move
|
| ^^ value borrowed here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `drop_unsized` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `drop_unsized` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/borrow-after-move.rs:14:31
|
--> $DIR/borrow-after-move.rs:14:31
|
||||||
|
|
|
|
||||||
LL | fn drop_unsized<T: ?Sized>(_: T) {}
|
LL | fn drop_unsized<T: ?Sized>(_: T) {}
|
||||||
|
|
|
@ -17,7 +17,7 @@ LL | drop_unsized(y);
|
||||||
LL | drop_unsized(y);
|
LL | drop_unsized(y);
|
||||||
| ^ value used here after move
|
| ^ value used here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in function `drop_unsized` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in function `drop_unsized` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/double-move.rs:14:31
|
--> $DIR/double-move.rs:14:31
|
||||||
|
|
|
|
||||||
LL | fn drop_unsized<T: ?Sized>(_: T) {}
|
LL | fn drop_unsized<T: ?Sized>(_: T) {}
|
||||||
|
|
|
@ -10,7 +10,7 @@ LL |
|
||||||
LL | let x = n.to_string();
|
LL | let x = n.to_string();
|
||||||
| ^^^^^^^^^^^^^ value borrowed here after move
|
| ^^^^^^^^^^^^^ value borrowed here after move
|
||||||
|
|
|
|
||||||
note: consider changing this parameter type in method `push` to borrow instead if ownering the value isn't necessary
|
note: consider changing this parameter type in method `push` to borrow instead if owning the value isn't necessary
|
||||||
--> $DIR/use-after-move-implicity-coerced-object.rs:17:27
|
--> $DIR/use-after-move-implicity-coerced-object.rs:17:27
|
||||||
|
|
|
|
||||||
LL | fn push(&mut self, n: Box<dyn ToString + 'static>) {
|
LL | fn push(&mut self, n: Box<dyn ToString + 'static>) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue