Rollup merge of #136018 - estebank:long-moved-type, r=jieyouxu
Use short ty string for move errors ``` error[E0382]: use of moved value: `x` --> bay.rs:14:14 | 12 | fn foo(x: D) { | - move occurs because `x` has type `(((..., ..., ..., ...), ..., ..., ...), ..., ..., ...)`, which does not implement the `Copy` trait 13 | let _a = x; | - value moved here 14 | let _b = x; //~ ERROR use of moved value | ^ value used here after move | = note: the full type name has been written to 'bay.long-type-14349227078439097973.txt' = note: consider using `--verbose` to print the full type name to the console help: consider cloning the value if the performance cost is acceptable | 13 | let _a = x.clone(); | ++++++++ ``` Address 4th case in #135919.
This commit is contained in:
commit
2080d66a15
9 changed files with 93 additions and 8 deletions
|
@ -25,6 +25,8 @@ mir_build_borrow_of_moved_value = borrow of moved value
|
|||
.occurs_because_label = move occurs because `{$name}` has type `{$ty}`, which does not implement the `Copy` trait
|
||||
.value_borrowed_label = value borrowed here after move
|
||||
.suggestion = borrow this binding in the pattern to avoid moving the value
|
||||
.full_type_name = the full type name has been written to '{$path}'
|
||||
.consider_verbose = consider using `--verbose` to print the full type name to the console
|
||||
|
||||
mir_build_call_to_deprecated_safe_fn_requires_unsafe =
|
||||
call to deprecated safe function `{$function}` is unsafe and requires unsafe block
|
||||
|
|
|
@ -790,7 +790,7 @@ pub(crate) struct IrrefutableLetPatternsWhileLet {
|
|||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(mir_build_borrow_of_moved_value)]
|
||||
pub(crate) struct BorrowOfMovedValue<'tcx> {
|
||||
pub(crate) struct BorrowOfMovedValue {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
#[label(mir_build_occurs_because_label)]
|
||||
|
@ -798,9 +798,13 @@ pub(crate) struct BorrowOfMovedValue<'tcx> {
|
|||
#[label(mir_build_value_borrowed_label)]
|
||||
pub(crate) conflicts_ref: Vec<Span>,
|
||||
pub(crate) name: Symbol,
|
||||
pub(crate) ty: Ty<'tcx>,
|
||||
pub(crate) ty: String,
|
||||
#[suggestion(code = "ref ", applicability = "machine-applicable")]
|
||||
pub(crate) suggest_borrowing: Option<Span>,
|
||||
#[note(mir_build_full_type_name)]
|
||||
#[note(mir_build_consider_verbose)]
|
||||
pub(crate) has_path: bool,
|
||||
pub(crate) path: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
|
|
@ -795,12 +795,16 @@ fn check_borrow_conflicts_in_at_patterns<'tcx>(cx: &MatchVisitor<'_, 'tcx>, pat:
|
|||
}
|
||||
});
|
||||
if !conflicts_ref.is_empty() {
|
||||
let mut path = None;
|
||||
let ty = cx.tcx.short_ty_string(ty, &mut path);
|
||||
sess.dcx().emit_err(BorrowOfMovedValue {
|
||||
binding_span: pat.span,
|
||||
conflicts_ref,
|
||||
name,
|
||||
ty,
|
||||
suggest_borrowing: Some(pat.span.shrink_to_lo()),
|
||||
has_path: path.is_some(),
|
||||
path: path.map(|p| p.display().to_string()).unwrap_or_default(),
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue