Skip to content

Commit a15916b

Browse files
committed
[WIP] add better error message for partial move
1 parent 8bf7fda commit a15916b

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

src/librustc_mir/borrow_check/error_reporting.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,15 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
130130
);
131131

132132
let mut is_loop_move = false;
133+
let mut is_partial_move = false;
133134
for move_site in &move_site_vec {
134135
let move_out = self.move_data.moves[(*move_site).moi];
135136
let moved_place = &self.move_data.move_paths[move_out.path].place;
136137

137138
let move_spans = self.move_spans(moved_place, move_out.source);
138139
let move_span = move_spans.args_or_use();
139140

141+
is_partial_move = used_place.is_prefix_of(moved_place);
140142
let move_msg = if move_spans.for_closure() {
141143
" into closure"
142144
} else {
@@ -175,8 +177,9 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
175177
err.span_label(
176178
span,
177179
format!(
178-
"value {} here after move",
179-
desired_action.as_verb_in_past_tense()
180+
"value {} here {}",
181+
desired_action.as_verb_in_past_tense(),
182+
if is_partial_move { "after partial move" } else { "after move" },
180183
),
181184
);
182185
}

src/test/ui/borrowck/borrowck-uninit-field-access.mir.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ error[E0382]: use of moved value: `line2`
2020
LL | let _moved = (line2.origin, line2.middle);
2121
| ------------ value moved here
2222
LL | line2.consume(); //[ast]~ ERROR use of partially moved value: `line2` [E0382]
23-
| ^^^^^ value used here after move
23+
| ^^^^^ value used here after partial move
2424
|
2525
= note: move occurs because `line2.middle` has type `Point`, which does not implement the `Copy` trait
2626

0 commit comments

Comments
 (0)