Skip to content

Commit b44269c

Browse files
authored
Rollup merge of rust-lang#69120 - spunit262:invalid-sugar-suggest, r=matthewjasper
Don't give invalid suggestion on desugared span.
2 parents 61d9231 + 30d4f1b commit b44269c

File tree

3 files changed

+47
-51
lines changed

3 files changed

+47
-51
lines changed

src/librustc_mir/borrow_check/diagnostics/mutability_errors.rs

+45-43
Original file line numberDiff line numberDiff line change
@@ -329,58 +329,60 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
329329
if self.body.local_decls[local].is_user_variable() =>
330330
{
331331
let local_decl = &self.body.local_decls[local];
332-
let suggestion = match local_decl.local_info {
333-
LocalInfo::User(ClearCrossCrate::Set(mir::BindingForm::ImplicitSelf(_))) => {
334-
Some(suggest_ampmut_self(self.infcx.tcx, local_decl))
335-
}
336-
337-
LocalInfo::User(ClearCrossCrate::Set(mir::BindingForm::Var(
338-
mir::VarBindingForm {
339-
binding_mode: ty::BindingMode::BindByValue(_),
340-
opt_ty_info,
341-
..
342-
},
343-
))) => Some(suggest_ampmut(
344-
self.infcx.tcx,
345-
self.body,
346-
local,
347-
local_decl,
348-
opt_ty_info,
349-
)),
350-
351-
LocalInfo::User(ClearCrossCrate::Set(mir::BindingForm::Var(
352-
mir::VarBindingForm {
353-
binding_mode: ty::BindingMode::BindByReference(_),
354-
..
355-
},
356-
))) => {
357-
let pattern_span = local_decl.source_info.span;
358-
suggest_ref_mut(self.infcx.tcx, pattern_span)
359-
.map(|replacement| (pattern_span, replacement))
360-
}
361-
362-
LocalInfo::User(ClearCrossCrate::Clear) => bug!("saw cleared local state"),
363-
364-
_ => unreachable!(),
365-
};
366332

367333
let (pointer_sigil, pointer_desc) = if local_decl.ty.is_region_ptr() {
368334
("&", "reference")
369335
} else {
370336
("*const", "pointer")
371337
};
372338

373-
if let Some((err_help_span, suggested_code)) = suggestion {
374-
err.span_suggestion(
375-
err_help_span,
376-
&format!("consider changing this to be a mutable {}", pointer_desc),
377-
suggested_code,
378-
Applicability::MachineApplicable,
379-
);
380-
}
381-
382339
match self.local_names[local] {
383340
Some(name) if !local_decl.from_compiler_desugaring() => {
341+
let suggestion = match local_decl.local_info {
342+
LocalInfo::User(ClearCrossCrate::Set(
343+
mir::BindingForm::ImplicitSelf(_),
344+
)) => Some(suggest_ampmut_self(self.infcx.tcx, local_decl)),
345+
346+
LocalInfo::User(ClearCrossCrate::Set(mir::BindingForm::Var(
347+
mir::VarBindingForm {
348+
binding_mode: ty::BindingMode::BindByValue(_),
349+
opt_ty_info,
350+
..
351+
},
352+
))) => Some(suggest_ampmut(
353+
self.infcx.tcx,
354+
self.body,
355+
local,
356+
local_decl,
357+
opt_ty_info,
358+
)),
359+
360+
LocalInfo::User(ClearCrossCrate::Set(mir::BindingForm::Var(
361+
mir::VarBindingForm {
362+
binding_mode: ty::BindingMode::BindByReference(_),
363+
..
364+
},
365+
))) => {
366+
let pattern_span = local_decl.source_info.span;
367+
suggest_ref_mut(self.infcx.tcx, pattern_span)
368+
.map(|replacement| (pattern_span, replacement))
369+
}
370+
371+
LocalInfo::User(ClearCrossCrate::Clear) => {
372+
bug!("saw cleared local state")
373+
}
374+
375+
_ => unreachable!(),
376+
};
377+
378+
if let Some((err_help_span, suggested_code)) = suggestion {
379+
err.span_suggestion(
380+
err_help_span,
381+
&format!("consider changing this to be a mutable {}", pointer_desc),
382+
suggested_code,
383+
Applicability::MachineApplicable,
384+
);
385+
}
384386
err.span_label(
385387
span,
386388
format!(

src/test/ui/async-await/dont-print-desugared-async.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ error[E0596]: cannot borrow data in a `&` reference as mutable
22
--> $DIR/dont-print-desugared-async.rs:5:20
33
|
44
LL | async fn async_fn(&ref mut s: &[i32]) {}
5-
| -^^^^^^^^^
6-
| ||
7-
| |cannot borrow as mutable through `&` reference
8-
| help: consider changing this to be a mutable reference: `&mut ref mut s`
5+
| ^^^^^^^^^ cannot borrow as mutable through `&` reference
96

107
error: aborting due to previous error
118

src/test/ui/nll/dont-print-desugared.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ error[E0596]: cannot borrow data in a `&` reference as mutable
22
--> $DIR/dont-print-desugared.rs:4:10
33
|
44
LL | for &ref mut x in s {}
5-
| -^^^^^^^^^
6-
| ||
7-
| |cannot borrow as mutable through `&` reference
8-
| help: consider changing this to be a mutable reference: `&mut ref mut x`
5+
| ^^^^^^^^^ cannot borrow as mutable through `&` reference
96

107
error[E0597]: `y` does not live long enough
118
--> $DIR/dont-print-desugared.rs:17:16

0 commit comments

Comments
 (0)