mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-21 11:23:03 +00:00
Auto merge of #106284 - estebank:merge-mut-errors, r=jyn514
Merge multiple mutable borrows of immutable binding errors Fix #53466.
This commit is contained in:
commit
d5a7ddd99f
@ -12,7 +12,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
place: &str,
|
place: &str,
|
||||||
borrow_place: &str,
|
borrow_place: &str,
|
||||||
value_place: &str,
|
value_place: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
self.infcx.tcx.sess.create_err(crate::session_diagnostics::MoveBorrow {
|
self.infcx.tcx.sess.create_err(crate::session_diagnostics::MoveBorrow {
|
||||||
place,
|
place,
|
||||||
span,
|
span,
|
||||||
@ -28,7 +28,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
desc: &str,
|
desc: &str,
|
||||||
borrow_span: Span,
|
borrow_span: Span,
|
||||||
borrow_desc: &str,
|
borrow_desc: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self,
|
self,
|
||||||
span,
|
span,
|
||||||
@ -50,7 +50,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
old_loan_span: Span,
|
old_loan_span: Span,
|
||||||
old_opt_via: &str,
|
old_opt_via: &str,
|
||||||
old_load_end_span: Option<Span>,
|
old_load_end_span: Option<Span>,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let via =
|
let via =
|
||||||
|msg: &str| if msg.is_empty() { "".to_string() } else { format!(" (via {})", msg) };
|
|msg: &str| if msg.is_empty() { "".to_string() } else { format!(" (via {})", msg) };
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
@ -98,7 +98,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
desc: &str,
|
desc: &str,
|
||||||
old_loan_span: Span,
|
old_loan_span: Span,
|
||||||
old_load_end_span: Option<Span>,
|
old_load_end_span: Option<Span>,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self,
|
self,
|
||||||
new_loan_span,
|
new_loan_span,
|
||||||
@ -269,7 +269,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
desc: &str,
|
desc: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
struct_span_err!(self, span, E0594, "cannot assign to {}", desc)
|
struct_span_err!(self, span, E0594, "cannot assign to {}", desc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,7 +348,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
span: Span,
|
span: Span,
|
||||||
path: &str,
|
path: &str,
|
||||||
reason: &str,
|
reason: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
struct_span_err!(self, span, E0596, "cannot borrow {} as mutable{}", path, reason,)
|
struct_span_err!(self, span, E0596, "cannot borrow {} as mutable{}", path, reason,)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
immutable_place: &str,
|
immutable_place: &str,
|
||||||
immutable_section: &str,
|
immutable_section: &str,
|
||||||
action: &str,
|
action: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self,
|
self,
|
||||||
mutate_span,
|
mutate_span,
|
||||||
@ -378,7 +378,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
yield_span: Span,
|
yield_span: Span,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self,
|
self,
|
||||||
span,
|
span,
|
||||||
@ -392,7 +392,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
pub(crate) fn cannot_borrow_across_destructor(
|
pub(crate) fn cannot_borrow_across_destructor(
|
||||||
&self,
|
&self,
|
||||||
borrow_span: Span,
|
borrow_span: Span,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
struct_span_err!(
|
struct_span_err!(
|
||||||
self,
|
self,
|
||||||
borrow_span,
|
borrow_span,
|
||||||
@ -405,7 +405,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
path: &str,
|
path: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
struct_span_err!(self, span, E0597, "{} does not live long enough", path,)
|
struct_span_err!(self, span, E0597, "{} does not live long enough", path,)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,7 +415,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
return_kind: &str,
|
return_kind: &str,
|
||||||
reference_desc: &str,
|
reference_desc: &str,
|
||||||
path_desc: &str,
|
path_desc: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self,
|
self,
|
||||||
span,
|
span,
|
||||||
@ -440,7 +440,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
closure_kind: &str,
|
closure_kind: &str,
|
||||||
borrowed_path: &str,
|
borrowed_path: &str,
|
||||||
capture_span: Span,
|
capture_span: Span,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self,
|
self,
|
||||||
closure_span,
|
closure_span,
|
||||||
@ -458,14 +458,14 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
pub(crate) fn thread_local_value_does_not_live_long_enough(
|
pub(crate) fn thread_local_value_does_not_live_long_enough(
|
||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
struct_span_err!(self, span, E0712, "thread-local variable borrowed past end of function",)
|
struct_span_err!(self, span, E0712, "thread-local variable borrowed past end of function",)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn temporary_value_borrowed_for_too_long(
|
pub(crate) fn temporary_value_borrowed_for_too_long(
|
||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
struct_span_err!(self, span, E0716, "temporary value dropped while borrowed",)
|
struct_span_err!(self, span, E0716, "temporary value dropped while borrowed",)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,6 +180,9 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
|||||||
// the verbs used in some diagnostic messages.
|
// the verbs used in some diagnostic messages.
|
||||||
let act;
|
let act;
|
||||||
let acted_on;
|
let acted_on;
|
||||||
|
let mut suggest = true;
|
||||||
|
let mut mut_error = None;
|
||||||
|
let mut count = 1;
|
||||||
|
|
||||||
let span = match error_access {
|
let span = match error_access {
|
||||||
AccessKind::Mutate => {
|
AccessKind::Mutate => {
|
||||||
@ -194,15 +197,50 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
|||||||
|
|
||||||
let borrow_spans = self.borrow_spans(span, location);
|
let borrow_spans = self.borrow_spans(span, location);
|
||||||
let borrow_span = borrow_spans.args_or_use();
|
let borrow_span = borrow_spans.args_or_use();
|
||||||
err = self.cannot_borrow_path_as_mutable_because(borrow_span, &item_msg, &reason);
|
match the_place_err {
|
||||||
borrow_spans.var_span_label(
|
PlaceRef { local, projection: [] }
|
||||||
&mut err,
|
if self.body.local_decls[local].can_be_made_mutable() =>
|
||||||
format!(
|
{
|
||||||
"mutable borrow occurs due to use of {} in closure",
|
let span = self.body.local_decls[local].source_info.span;
|
||||||
self.describe_any_place(access_place.as_ref()),
|
mut_error = Some(span);
|
||||||
),
|
if let Some((buffer, c)) = self.get_buffered_mut_error(span) {
|
||||||
"mutable",
|
// We've encountered a second (or more) attempt to mutably borrow an
|
||||||
);
|
// immutable binding, so the likely problem is with the binding
|
||||||
|
// declaration, not the use. We collect these in a single diagnostic
|
||||||
|
// and make the binding the primary span of the error.
|
||||||
|
err = buffer;
|
||||||
|
count = c + 1;
|
||||||
|
if count == 2 {
|
||||||
|
err.replace_span_with(span, false);
|
||||||
|
err.span_label(span, "not mutable");
|
||||||
|
}
|
||||||
|
suggest = false;
|
||||||
|
} else {
|
||||||
|
err = self.cannot_borrow_path_as_mutable_because(
|
||||||
|
borrow_span,
|
||||||
|
&item_msg,
|
||||||
|
&reason,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
err = self.cannot_borrow_path_as_mutable_because(
|
||||||
|
borrow_span,
|
||||||
|
&item_msg,
|
||||||
|
&reason,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if suggest {
|
||||||
|
borrow_spans.var_span_label(
|
||||||
|
&mut err,
|
||||||
|
format!(
|
||||||
|
"mutable borrow occurs due to use of {} in closure",
|
||||||
|
self.describe_any_place(access_place.as_ref()),
|
||||||
|
),
|
||||||
|
"mutable",
|
||||||
|
);
|
||||||
|
}
|
||||||
borrow_span
|
borrow_span
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -276,7 +314,9 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
|||||||
pat_span: _,
|
pat_span: _,
|
||||||
},
|
},
|
||||||
)))) => {
|
)))) => {
|
||||||
err.span_note(sp, "the binding is already a mutable borrow");
|
if suggest {
|
||||||
|
err.span_note(sp, "the binding is already a mutable borrow");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
err.span_note(
|
err.span_note(
|
||||||
@ -333,16 +373,20 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
|||||||
let local_decl = &self.body.local_decls[local];
|
let local_decl = &self.body.local_decls[local];
|
||||||
assert_eq!(local_decl.mutability, Mutability::Not);
|
assert_eq!(local_decl.mutability, Mutability::Not);
|
||||||
|
|
||||||
err.span_label(span, format!("cannot {act}"));
|
if count < 10 {
|
||||||
err.span_suggestion(
|
err.span_label(span, format!("cannot {act}"));
|
||||||
local_decl.source_info.span,
|
}
|
||||||
"consider changing this to be mutable",
|
if suggest {
|
||||||
format!("mut {}", self.local_names[local].unwrap()),
|
err.span_suggestion_verbose(
|
||||||
Applicability::MachineApplicable,
|
local_decl.source_info.span.shrink_to_lo(),
|
||||||
);
|
"consider changing this to be mutable",
|
||||||
let tcx = self.infcx.tcx;
|
"mut ".to_string(),
|
||||||
if let ty::Closure(id, _) = *the_place_err.ty(self.body, tcx).ty.kind() {
|
Applicability::MachineApplicable,
|
||||||
self.show_mutating_upvar(tcx, id.expect_local(), the_place_err, &mut err);
|
);
|
||||||
|
let tcx = self.infcx.tcx;
|
||||||
|
if let ty::Closure(id, _) = *the_place_err.ty(self.body, tcx).ty.kind() {
|
||||||
|
self.show_mutating_upvar(tcx, id.expect_local(), the_place_err, &mut err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -615,7 +659,11 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.buffer_error(err);
|
if let Some(span) = mut_error {
|
||||||
|
self.buffer_mut_error(span, err, count);
|
||||||
|
} else {
|
||||||
|
self.buffer_error(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn suggest_map_index_mut_alternatives(&self, ty: Ty<'tcx>, err: &mut Diagnostic, span: Span) {
|
fn suggest_map_index_mut_alternatives(&self, ty: Ty<'tcx>, err: &mut Diagnostic, span: Span) {
|
||||||
|
@ -2270,6 +2270,7 @@ mod error {
|
|||||||
/// same primary span come out in a consistent order.
|
/// same primary span come out in a consistent order.
|
||||||
buffered_move_errors:
|
buffered_move_errors:
|
||||||
BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, DiagnosticBuilder<'tcx, ErrorGuaranteed>)>,
|
BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, DiagnosticBuilder<'tcx, ErrorGuaranteed>)>,
|
||||||
|
buffered_mut_errors: FxHashMap<Span, (DiagnosticBuilder<'tcx, ErrorGuaranteed>, usize)>,
|
||||||
/// Diagnostics to be reported buffer.
|
/// Diagnostics to be reported buffer.
|
||||||
buffered: Vec<Diagnostic>,
|
buffered: Vec<Diagnostic>,
|
||||||
/// Set to Some if we emit an error during borrowck
|
/// Set to Some if we emit an error during borrowck
|
||||||
@ -2281,6 +2282,7 @@ mod error {
|
|||||||
BorrowckErrors {
|
BorrowckErrors {
|
||||||
tcx,
|
tcx,
|
||||||
buffered_move_errors: BTreeMap::new(),
|
buffered_move_errors: BTreeMap::new(),
|
||||||
|
buffered_mut_errors: Default::default(),
|
||||||
buffered: Default::default(),
|
buffered: Default::default(),
|
||||||
tainted_by_errors: None,
|
tainted_by_errors: None,
|
||||||
}
|
}
|
||||||
@ -2331,12 +2333,34 @@ mod error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_buffered_mut_error(
|
||||||
|
&mut self,
|
||||||
|
span: Span,
|
||||||
|
) -> Option<(DiagnosticBuilder<'tcx, ErrorGuaranteed>, usize)> {
|
||||||
|
self.errors.buffered_mut_errors.remove(&span)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn buffer_mut_error(
|
||||||
|
&mut self,
|
||||||
|
span: Span,
|
||||||
|
t: DiagnosticBuilder<'tcx, ErrorGuaranteed>,
|
||||||
|
count: usize,
|
||||||
|
) {
|
||||||
|
self.errors.buffered_mut_errors.insert(span, (t, count));
|
||||||
|
}
|
||||||
|
|
||||||
pub fn emit_errors(&mut self) -> Option<ErrorGuaranteed> {
|
pub fn emit_errors(&mut self) -> Option<ErrorGuaranteed> {
|
||||||
// Buffer any move errors that we collected and de-duplicated.
|
// Buffer any move errors that we collected and de-duplicated.
|
||||||
for (_, (_, diag)) in std::mem::take(&mut self.errors.buffered_move_errors) {
|
for (_, (_, diag)) in std::mem::take(&mut self.errors.buffered_move_errors) {
|
||||||
// We have already set tainted for this error, so just buffer it.
|
// We have already set tainted for this error, so just buffer it.
|
||||||
diag.buffer(&mut self.errors.buffered);
|
diag.buffer(&mut self.errors.buffered);
|
||||||
}
|
}
|
||||||
|
for (_, (mut diag, count)) in std::mem::take(&mut self.errors.buffered_mut_errors) {
|
||||||
|
if count > 10 {
|
||||||
|
diag.note(&format!("...and {} other attempted mutable borrows", count - 10));
|
||||||
|
}
|
||||||
|
diag.buffer(&mut self.errors.buffered);
|
||||||
|
}
|
||||||
|
|
||||||
if !self.errors.buffered.is_empty() {
|
if !self.errors.buffered.is_empty() {
|
||||||
self.errors.buffered.sort_by_key(|diag| diag.sort_span);
|
self.errors.buffered.sort_by_key(|diag| diag.sort_span);
|
||||||
|
@ -365,12 +365,12 @@ impl Diagnostic {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn replace_span_with(&mut self, after: Span) -> &mut Self {
|
pub fn replace_span_with(&mut self, after: Span, keep_label: bool) -> &mut Self {
|
||||||
let before = self.span.clone();
|
let before = self.span.clone();
|
||||||
self.set_span(after);
|
self.set_span(after);
|
||||||
for span_label in before.span_labels() {
|
for span_label in before.span_labels() {
|
||||||
if let Some(label) = span_label.label {
|
if let Some(label) = span_label.label {
|
||||||
if span_label.is_primary {
|
if span_label.is_primary && keep_label {
|
||||||
self.span.push_span_label(after, label);
|
self.span.push_span_label(after, label);
|
||||||
} else {
|
} else {
|
||||||
self.span.push_span_label(span_label.span, label);
|
self.span.push_span_label(span_label.span, label);
|
||||||
|
@ -198,12 +198,12 @@ pub(super) fn emit_frag_parse_err(
|
|||||||
);
|
);
|
||||||
if !e.span.is_dummy() {
|
if !e.span.is_dummy() {
|
||||||
// early end of macro arm (#52866)
|
// early end of macro arm (#52866)
|
||||||
e.replace_span_with(parser.token.span.shrink_to_hi());
|
e.replace_span_with(parser.token.span.shrink_to_hi(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if e.span.is_dummy() {
|
if e.span.is_dummy() {
|
||||||
// Get around lack of span in error (#30128)
|
// Get around lack of span in error (#30128)
|
||||||
e.replace_span_with(site_span);
|
e.replace_span_with(site_span, true);
|
||||||
if !parser.sess.source_map().is_imported(arm_span) {
|
if !parser.sess.source_map().is_imported(arm_span) {
|
||||||
e.span_label(arm_span, "in this macro arm");
|
e.span_label(arm_span, "in this macro arm");
|
||||||
}
|
}
|
||||||
|
@ -3237,7 +3237,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
})) = call_node
|
})) = call_node
|
||||||
{
|
{
|
||||||
if Some(rcvr.span) == err.span.primary_span() {
|
if Some(rcvr.span) == err.span.primary_span() {
|
||||||
err.replace_span_with(path.ident.span);
|
err.replace_span_with(path.ident.span, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(Node::Expr(hir::Expr {
|
if let Some(Node::Expr(hir::Expr {
|
||||||
|
@ -25,12 +25,10 @@ fn main() {
|
|||||||
|
|
||||||
// Outputs require mutable places
|
// Outputs require mutable places
|
||||||
|
|
||||||
let v: Vec<u64> = vec![0, 1, 2];
|
let v: Vec<u64> = vec![0, 1, 2]; //~ ERROR cannot borrow `v` as mutable
|
||||||
asm!("{}", in(reg) v[0]);
|
asm!("{}", in(reg) v[0]);
|
||||||
asm!("{}", out(reg) v[0]);
|
asm!("{}", out(reg) v[0]);
|
||||||
//~^ ERROR cannot borrow `v` as mutable, as it is not declared as mutable
|
|
||||||
asm!("{}", inout(reg) v[0]);
|
asm!("{}", inout(reg) v[0]);
|
||||||
//~^ ERROR cannot borrow `v` as mutable, as it is not declared as mutable
|
|
||||||
|
|
||||||
// Sym operands must point to a function or static
|
// Sym operands must point to a function or static
|
||||||
}
|
}
|
||||||
|
@ -25,24 +25,22 @@ LL | let mut y: u64 = 0;
|
|||||||
| +++
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/type-check-2-2.rs:30:29
|
--> $DIR/type-check-2-2.rs:28:13
|
||||||
|
|
|
|
||||||
LL | let v: Vec<u64> = vec![0, 1, 2];
|
LL | let v: Vec<u64> = vec![0, 1, 2];
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
| ^ not mutable
|
||||||
LL | asm!("{}", in(reg) v[0]);
|
LL | asm!("{}", in(reg) v[0]);
|
||||||
LL | asm!("{}", out(reg) v[0]);
|
LL | asm!("{}", out(reg) v[0]);
|
||||||
| ^ cannot borrow as mutable
|
| - cannot borrow as mutable
|
||||||
|
|
||||||
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
|
||||||
--> $DIR/type-check-2-2.rs:32:31
|
|
||||||
|
|
|
||||||
LL | let v: Vec<u64> = vec![0, 1, 2];
|
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
|
||||||
...
|
|
||||||
LL | asm!("{}", inout(reg) v[0]);
|
LL | asm!("{}", inout(reg) v[0]);
|
||||||
| ^ cannot borrow as mutable
|
| - cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v: Vec<u64> = vec![0, 1, 2];
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0381, E0596.
|
Some errors have detailed explanations: E0381, E0596.
|
||||||
For more information about an error, try `rustc --explain E0381`.
|
For more information about an error, try `rustc --explain E0381`.
|
||||||
|
@ -22,11 +22,10 @@ fn main() {
|
|||||||
// Outputs require mutable places
|
// Outputs require mutable places
|
||||||
|
|
||||||
let v: Vec<u64> = vec![0, 1, 2];
|
let v: Vec<u64> = vec![0, 1, 2];
|
||||||
|
//~^ ERROR cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
asm!("{}", in(reg) v[0]);
|
asm!("{}", in(reg) v[0]);
|
||||||
asm!("{}", out(reg) v[0]);
|
asm!("{}", out(reg) v[0]);
|
||||||
//~^ ERROR cannot borrow `v` as mutable, as it is not declared as mutable
|
|
||||||
asm!("{}", inout(reg) v[0]);
|
asm!("{}", inout(reg) v[0]);
|
||||||
//~^ ERROR cannot borrow `v` as mutable, as it is not declared as mutable
|
|
||||||
|
|
||||||
// Sym operands must point to a function or static
|
// Sym operands must point to a function or static
|
||||||
|
|
||||||
|
@ -25,24 +25,22 @@ LL | let mut y: u64 = 0;
|
|||||||
| +++
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/type-check-5.rs:26:29
|
--> $DIR/type-check-5.rs:24:13
|
||||||
|
|
|
|
||||||
LL | let v: Vec<u64> = vec![0, 1, 2];
|
LL | let v: Vec<u64> = vec![0, 1, 2];
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
| ^ not mutable
|
||||||
LL | asm!("{}", in(reg) v[0]);
|
|
||||||
LL | asm!("{}", out(reg) v[0]);
|
|
||||||
| ^ cannot borrow as mutable
|
|
||||||
|
|
||||||
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
|
||||||
--> $DIR/type-check-5.rs:28:31
|
|
||||||
|
|
|
||||||
LL | let v: Vec<u64> = vec![0, 1, 2];
|
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
|
||||||
...
|
...
|
||||||
|
LL | asm!("{}", out(reg) v[0]);
|
||||||
|
| - cannot borrow as mutable
|
||||||
LL | asm!("{}", inout(reg) v[0]);
|
LL | asm!("{}", inout(reg) v[0]);
|
||||||
| ^ cannot borrow as mutable
|
| - cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v: Vec<u64> = vec![0, 1, 2];
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0381, E0596.
|
Some errors have detailed explanations: E0381, E0596.
|
||||||
For more information about an error, try `rustc --explain E0381`.
|
For more information about an error, try `rustc --explain E0381`.
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-61452.rs:4:5
|
--> $DIR/issue-61452.rs:4:5
|
||||||
|
|
|
|
||||||
LL | pub async fn f(x: Option<usize>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x.take();
|
LL | x.take();
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | pub async fn f(mut x: Option<usize>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0384]: cannot assign twice to immutable variable `x`
|
error[E0384]: cannot assign twice to immutable variable `x`
|
||||||
--> $DIR/issue-61452.rs:9:5
|
--> $DIR/issue-61452.rs:9:5
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `data` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `data` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-61187.rs:6:5
|
--> $DIR/issue-61187.rs:6:5
|
||||||
|
|
|
|
||||||
LL | async fn response(data: Vec<u8>) {
|
|
||||||
| ---- help: consider changing this to be mutable: `mut data`
|
|
||||||
LL | data.reverse();
|
LL | data.reverse();
|
||||||
| ^^^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | async fn response(mut data: Vec<u8>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ fn main() {
|
|||||||
|
|
||||||
let y = Int(2);
|
let y = Int(2);
|
||||||
//~^ HELP consider changing this to be mutable
|
//~^ HELP consider changing this to be mutable
|
||||||
//~| SUGGESTION mut y
|
//~| SUGGESTION mut
|
||||||
y //~ ERROR cannot borrow `y` as mutable, as it is not declared as mutable
|
y //~ ERROR cannot borrow `y` as mutable, as it is not declared as mutable
|
||||||
//~| cannot borrow as mutable
|
//~| cannot borrow as mutable
|
||||||
+=
|
+=
|
||||||
|
@ -10,11 +10,13 @@ LL | x;
|
|||||||
error[E0596]: cannot borrow `y` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `y` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/augmented-assignments.rs:23:5
|
--> $DIR/augmented-assignments.rs:23:5
|
||||||
|
|
|
|
||||||
LL | let y = Int(2);
|
|
||||||
| - help: consider changing this to be mutable: `mut y`
|
|
||||||
...
|
|
||||||
LL | y
|
LL | y
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut y = Int(2);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrow-raw-address-of-mutability.rs:5:13
|
--> $DIR/borrow-raw-address-of-mutability.rs:5:13
|
||||||
|
|
|
|
||||||
LL | let x = 0;
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | let y = &raw mut x;
|
LL | let y = &raw mut x;
|
||||||
| ^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x = 0;
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrow-raw-address-of-mutability.rs:11:17
|
--> $DIR/borrow-raw-address-of-mutability.rs:11:17
|
||||||
@ -18,13 +21,16 @@ LL | let y = &raw mut x;
|
|||||||
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrow-raw-address-of-mutability.rs:21:5
|
--> $DIR/borrow-raw-address-of-mutability.rs:21:5
|
||||||
|
|
|
|
||||||
LL | let f = || {
|
|
||||||
| - help: consider changing this to be mutable: `mut f`
|
|
||||||
LL | let y = &raw mut x;
|
LL | let y = &raw mut x;
|
||||||
| - calling `f` requires mutable binding due to mutable borrow of `x`
|
| - calling `f` requires mutable binding due to mutable borrow of `x`
|
||||||
LL | };
|
LL | };
|
||||||
LL | f();
|
LL | f();
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut f = || {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
|
error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
|
||||||
--> $DIR/borrow-raw-address-of-mutability.rs:29:17
|
--> $DIR/borrow-raw-address-of-mutability.rs:29:17
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-access-permissions.rs:9:19
|
--> $DIR/borrowck-access-permissions.rs:9:19
|
||||||
|
|
|
|
||||||
LL | let x = 1;
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
...
|
|
||||||
LL | let _y1 = &mut x;
|
LL | let _y1 = &mut x;
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x = 1;
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow immutable static item `static_x` as mutable
|
error[E0596]: cannot borrow immutable static item `static_x` as mutable
|
||||||
--> $DIR/borrowck-access-permissions.rs:14:19
|
--> $DIR/borrowck-access-permissions.rs:14:19
|
||||||
@ -16,11 +18,13 @@ LL | let _y1 = &mut static_x;
|
|||||||
error[E0596]: cannot borrow `*box_x` as mutable, as `box_x` is not declared as mutable
|
error[E0596]: cannot borrow `*box_x` as mutable, as `box_x` is not declared as mutable
|
||||||
--> $DIR/borrowck-access-permissions.rs:22:19
|
--> $DIR/borrowck-access-permissions.rs:22:19
|
||||||
|
|
|
|
||||||
LL | let box_x = Box::new(1);
|
|
||||||
| ----- help: consider changing this to be mutable: `mut box_x`
|
|
||||||
...
|
|
||||||
LL | let _y1 = &mut *box_x;
|
LL | let _y1 = &mut *box_x;
|
||||||
| ^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut box_x = Box::new(1);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*ref_x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*ref_x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-access-permissions.rs:30:19
|
--> $DIR/borrowck-access-permissions.rs:30:19
|
||||||
|
@ -1,34 +1,46 @@
|
|||||||
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-argument.rs:10:5
|
--> $DIR/borrowck-argument.rs:10:5
|
||||||
|
|
|
|
||||||
LL | fn func(arg: S) {
|
|
||||||
| --- help: consider changing this to be mutable: `mut arg`
|
|
||||||
LL | arg.mutate();
|
LL | arg.mutate();
|
||||||
| ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn func(mut arg: S) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-argument.rs:15:9
|
--> $DIR/borrowck-argument.rs:15:9
|
||||||
|
|
|
|
||||||
LL | fn method(&self, arg: S) {
|
|
||||||
| --- help: consider changing this to be mutable: `mut arg`
|
|
||||||
LL | arg.mutate();
|
LL | arg.mutate();
|
||||||
| ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn method(&self, mut arg: S) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-argument.rs:21:9
|
--> $DIR/borrowck-argument.rs:21:9
|
||||||
|
|
|
|
||||||
LL | fn default(&self, arg: S) {
|
|
||||||
| --- help: consider changing this to be mutable: `mut arg`
|
|
||||||
LL | arg.mutate();
|
LL | arg.mutate();
|
||||||
| ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn default(&self, mut arg: S) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-argument.rs:32:17
|
--> $DIR/borrowck-argument.rs:32:17
|
||||||
|
|
|
|
||||||
LL | (|arg: S| { arg.mutate() })(s);
|
LL | (|arg: S| { arg.mutate() })(s);
|
||||||
| --- ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
| |
|
|
|
||||||
| help: consider changing this to be mutable: `mut arg`
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | (|mut arg: S| { arg.mutate() })(s);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-auto-mut-ref-to-immut-var.rs:15:5
|
--> $DIR/borrowck-auto-mut-ref-to-immut-var.rs:15:5
|
||||||
|
|
|
|
||||||
LL | let x = Foo { x: 3 };
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x.printme();
|
LL | x.printme();
|
||||||
| ^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x = Foo { x: 3 };
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -105,10 +105,13 @@ LL | *bar1;
|
|||||||
error[E0596]: cannot borrow `foo.bar1` as mutable, as `foo` is not declared as mutable
|
error[E0596]: cannot borrow `foo.bar1` as mutable, as `foo` is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-from-owned-ptr.rs:122:16
|
--> $DIR/borrowck-borrow-from-owned-ptr.rs:122:16
|
||||||
|
|
|
|
||||||
LL | let foo = make_foo();
|
|
||||||
| --- help: consider changing this to be mutable: `mut foo`
|
|
||||||
LL | let bar1 = &mut foo.bar1;
|
LL | let bar1 = &mut foo.bar1;
|
||||||
| ^^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut foo = make_foo();
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 11 previous errors
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
|
@ -105,10 +105,13 @@ LL | *bar1;
|
|||||||
error[E0596]: cannot borrow `foo.bar1` as mutable, as `foo` is not declared as mutable
|
error[E0596]: cannot borrow `foo.bar1` as mutable, as `foo` is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-from-stack-variable.rs:120:16
|
--> $DIR/borrowck-borrow-from-stack-variable.rs:120:16
|
||||||
|
|
|
|
||||||
LL | let foo = make_foo();
|
|
||||||
| --- help: consider changing this to be mutable: `mut foo`
|
|
||||||
LL | let bar1 = &mut foo.bar1;
|
LL | let bar1 = &mut foo.bar1;
|
||||||
| ^^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut foo = make_foo();
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 11 previous errors
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `*a` as mutable, as `a` is not declared as mutable
|
error[E0596]: cannot borrow `*a` as mutable, as `a` is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-immut-deref-of-box-as-mut.rs:12:5
|
--> $DIR/borrowck-borrow-immut-deref-of-box-as-mut.rs:12:5
|
||||||
|
|
|
|
||||||
LL | let a: Box<_> = Box::new(A);
|
|
||||||
| - help: consider changing this to be mutable: `mut a`
|
|
||||||
LL | a.foo();
|
LL | a.foo();
|
||||||
| ^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut a: Box<_> = Box::new(A);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-mut-addr-of-imm-var.rs:3:25
|
--> $DIR/borrowck-mut-addr-of-imm-var.rs:3:25
|
||||||
|
|
|
|
||||||
LL | let x: isize = 3;
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | let y: &mut isize = &mut x;
|
LL | let y: &mut isize = &mut x;
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x: isize = 3;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-mut-slice-of-imm-vec.rs:7:11
|
--> $DIR/borrowck-mut-slice-of-imm-vec.rs:7:11
|
||||||
|
|
|
|
||||||
LL | let v = vec![1, 2, 3];
|
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
|
||||||
LL | write(&mut v);
|
LL | write(&mut v);
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v = vec![1, 2, 3];
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -11,11 +11,13 @@ LL | use_mut(sp);
|
|||||||
error[E0596]: cannot borrow `s` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `s` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-overloaded-call.rs:67:5
|
--> $DIR/borrowck-overloaded-call.rs:67:5
|
||||||
|
|
|
|
||||||
LL | let s = SFnMut {
|
|
||||||
| - help: consider changing this to be mutable: `mut s`
|
|
||||||
...
|
|
||||||
LL | s(3);
|
LL | s(3);
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut s = SFnMut {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0382]: use of moved value: `s`
|
error[E0382]: use of moved value: `s`
|
||||||
--> $DIR/borrowck-overloaded-call.rs:75:5
|
--> $DIR/borrowck-overloaded-call.rs:75:5
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x.0` as mutable, as `x` is not declared as mutable
|
error[E0596]: cannot borrow `x.0` as mutable, as `x` is not declared as mutable
|
||||||
--> $DIR/borrowck-ref-mut-of-imm.rs:4:12
|
--> $DIR/borrowck-ref-mut-of-imm.rs:4:12
|
||||||
|
|
|
|
||||||
LL | fn destructure(x: Option<isize>) -> isize {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
...
|
|
||||||
LL | Some(ref mut v) => *v
|
LL | Some(ref mut v) => *v
|
||||||
| ^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn destructure(mut x: Option<isize>) -> isize {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -11,10 +11,13 @@ LL | use_mut(g);
|
|||||||
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-unboxed-closures.rs:7:5
|
--> $DIR/borrowck-unboxed-closures.rs:7:5
|
||||||
|
|
|
|
||||||
LL | fn b<F:FnMut(isize, isize) -> isize>(f: F) {
|
|
||||||
| - help: consider changing this to be mutable: `mut f`
|
|
||||||
LL | f(1, 2);
|
LL | f(1, 2);
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn b<F:FnMut(isize, isize) -> isize>(mut f: F) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0382]: use of moved value: `f`
|
error[E0382]: use of moved value: `f`
|
||||||
--> $DIR/borrowck-unboxed-closures.rs:12:5
|
--> $DIR/borrowck-unboxed-closures.rs:12:5
|
||||||
|
@ -1,18 +1,24 @@
|
|||||||
error[E0594]: cannot assign to `*y`, as `y` is not declared as mutable
|
error[E0594]: cannot assign to `*y`, as `y` is not declared as mutable
|
||||||
--> $DIR/immut-function-arguments.rs:2:5
|
--> $DIR/immut-function-arguments.rs:2:5
|
||||||
|
|
|
|
||||||
LL | fn f(y: Box<isize>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut y`
|
|
||||||
LL | *y = 5;
|
LL | *y = 5;
|
||||||
| ^^^^^^ cannot assign
|
| ^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn f(mut y: Box<isize>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0594]: cannot assign to `*q`, as `q` is not declared as mutable
|
error[E0594]: cannot assign to `*q`, as `q` is not declared as mutable
|
||||||
--> $DIR/immut-function-arguments.rs:6:35
|
--> $DIR/immut-function-arguments.rs:6:35
|
||||||
|
|
|
|
||||||
LL | let _frob = |q: Box<isize>| { *q = 2; };
|
LL | let _frob = |q: Box<isize>| { *q = 2; };
|
||||||
| - ^^^^^^ cannot assign
|
| ^^^^^^ cannot assign
|
||||||
| |
|
|
|
||||||
| help: consider changing this to be mutable: `mut q`
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let _frob = |mut q: Box<isize>| { *q = 2; };
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
error[E0594]: cannot assign to `t.0`, as `t` is not declared as mutable
|
error[E0594]: cannot assign to `t.0`, as `t` is not declared as mutable
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:13:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:13:9
|
||||||
|
|
|
|
||||||
LL | let t: Tuple = (S(0), 0);
|
|
||||||
| - help: consider changing this to be mutable: `mut t`
|
|
||||||
LL | drop(t);
|
|
||||||
LL | t.0 = S(1);
|
LL | t.0 = S(1);
|
||||||
| ^^^^^^^^^^ cannot assign
|
| ^^^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut t: Tuple = (S(0), 0);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0382]: assign to part of moved value: `t`
|
error[E0382]: assign to part of moved value: `t`
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:13:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:13:9
|
||||||
@ -20,20 +22,24 @@ LL | t.0 = S(1);
|
|||||||
error[E0594]: cannot assign to `t.1`, as `t` is not declared as mutable
|
error[E0594]: cannot assign to `t.1`, as `t` is not declared as mutable
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:16:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:16:9
|
||||||
|
|
|
|
||||||
LL | let t: Tuple = (S(0), 0);
|
|
||||||
| - help: consider changing this to be mutable: `mut t`
|
|
||||||
...
|
|
||||||
LL | t.1 = 2;
|
LL | t.1 = 2;
|
||||||
| ^^^^^^^ cannot assign
|
| ^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut t: Tuple = (S(0), 0);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0594]: cannot assign to `u.0`, as `u` is not declared as mutable
|
error[E0594]: cannot assign to `u.0`, as `u` is not declared as mutable
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:24:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:24:9
|
||||||
|
|
|
|
||||||
LL | let u: Tpair = Tpair(S(0), 0);
|
|
||||||
| - help: consider changing this to be mutable: `mut u`
|
|
||||||
LL | drop(u);
|
|
||||||
LL | u.0 = S(1);
|
LL | u.0 = S(1);
|
||||||
| ^^^^^^^^^^ cannot assign
|
| ^^^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut u: Tpair = Tpair(S(0), 0);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0382]: assign to part of moved value: `u`
|
error[E0382]: assign to part of moved value: `u`
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:24:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:24:9
|
||||||
@ -48,20 +54,24 @@ LL | u.0 = S(1);
|
|||||||
error[E0594]: cannot assign to `u.1`, as `u` is not declared as mutable
|
error[E0594]: cannot assign to `u.1`, as `u` is not declared as mutable
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:27:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:27:9
|
||||||
|
|
|
|
||||||
LL | let u: Tpair = Tpair(S(0), 0);
|
|
||||||
| - help: consider changing this to be mutable: `mut u`
|
|
||||||
...
|
|
||||||
LL | u.1 = 2;
|
LL | u.1 = 2;
|
||||||
| ^^^^^^^ cannot assign
|
| ^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut u: Tpair = Tpair(S(0), 0);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0594]: cannot assign to `v.x`, as `v` is not declared as mutable
|
error[E0594]: cannot assign to `v.x`, as `v` is not declared as mutable
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:35:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:35:9
|
||||||
|
|
|
|
||||||
LL | let v: Spair = Spair { x: S(0), y: 0 };
|
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
|
||||||
LL | drop(v);
|
|
||||||
LL | v.x = S(1);
|
LL | v.x = S(1);
|
||||||
| ^^^^^^^^^^ cannot assign
|
| ^^^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v: Spair = Spair { x: S(0), y: 0 };
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0382]: assign to part of moved value: `v`
|
error[E0382]: assign to part of moved value: `v`
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:35:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:35:9
|
||||||
@ -76,11 +86,13 @@ LL | v.x = S(1);
|
|||||||
error[E0594]: cannot assign to `v.y`, as `v` is not declared as mutable
|
error[E0594]: cannot assign to `v.y`, as `v` is not declared as mutable
|
||||||
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:38:9
|
--> $DIR/issue-54499-field-mutation-of-moved-out.rs:38:9
|
||||||
|
|
|
|
||||||
LL | let v: Spair = Spair { x: S(0), y: 0 };
|
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
|
||||||
...
|
|
||||||
LL | v.y = 2;
|
LL | v.y = 2;
|
||||||
| ^^^^^^^ cannot assign
|
| ^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v: Spair = Spair { x: S(0), y: 0 };
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 9 previous errors
|
error: aborting due to 9 previous errors
|
||||||
|
|
||||||
|
18
src/test/ui/borrowck/many-mutable-borrows.rs
Normal file
18
src/test/ui/borrowck/many-mutable-borrows.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
fn main() {
|
||||||
|
let v = Vec::new(); //~ ERROR cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
v.push(0);
|
||||||
|
}
|
33
src/test/ui/borrowck/many-mutable-borrows.stderr
Normal file
33
src/test/ui/borrowck/many-mutable-borrows.stderr
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
|
--> $DIR/many-mutable-borrows.rs:2:9
|
||||||
|
|
|
||||||
|
LL | let v = Vec::new();
|
||||||
|
| ^ not mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
LL | v.push(0);
|
||||||
|
| --------- cannot borrow as mutable
|
||||||
|
|
|
||||||
|
= note: ...and 5 other attempted mutable borrows
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v = Vec::new();
|
||||||
|
| +++
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0596`.
|
@ -2,15 +2,14 @@
|
|||||||
#![crate_type = "rlib"]
|
#![crate_type = "rlib"]
|
||||||
|
|
||||||
pub fn f(b: &mut i32) {
|
pub fn f(b: &mut i32) {
|
||||||
//~^ NOTE the binding is already a mutable borrow
|
//~^ ERROR cannot borrow
|
||||||
|
//~| NOTE not mutable
|
||||||
//~| NOTE the binding is already a mutable borrow
|
//~| NOTE the binding is already a mutable borrow
|
||||||
h(&mut b);
|
h(&mut b);
|
||||||
//~^ ERROR cannot borrow
|
//~^ NOTE cannot borrow as mutable
|
||||||
//~| NOTE cannot borrow as mutable
|
|
||||||
//~| HELP try removing `&mut` here
|
//~| HELP try removing `&mut` here
|
||||||
g(&mut &mut b);
|
g(&mut &mut b);
|
||||||
//~^ ERROR cannot borrow
|
//~^ NOTE cannot borrow as mutable
|
||||||
//~| NOTE cannot borrow as mutable
|
|
||||||
//~| HELP try removing `&mut` here
|
//~| HELP try removing `&mut` here
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
error[E0596]: cannot borrow `b` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `b` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:7:7
|
--> $DIR/mut-borrow-of-mut-ref.rs:4:10
|
||||||
|
|
|
|
||||||
|
LL | pub fn f(b: &mut i32) {
|
||||||
|
| ^ not mutable
|
||||||
|
...
|
||||||
LL | h(&mut b);
|
LL | h(&mut b);
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ------ cannot borrow as mutable
|
||||||
|
...
|
||||||
|
LL | g(&mut &mut b);
|
||||||
|
| ------ cannot borrow as mutable
|
||||||
|
|
|
|
||||||
note: the binding is already a mutable borrow
|
note: the binding is already a mutable borrow
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:4:13
|
--> $DIR/mut-borrow-of-mut-ref.rs:4:13
|
||||||
@ -14,18 +20,6 @@ help: try removing `&mut` here
|
|||||||
LL - h(&mut b);
|
LL - h(&mut b);
|
||||||
LL + h(b);
|
LL + h(b);
|
||||||
|
|
|
|
||||||
|
|
||||||
error[E0596]: cannot borrow `b` as mutable, as it is not declared as mutable
|
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:11:12
|
|
||||||
|
|
|
||||||
LL | g(&mut &mut b);
|
|
||||||
| ^^^^^^ cannot borrow as mutable
|
|
||||||
|
|
|
||||||
note: the binding is already a mutable borrow
|
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:4:13
|
|
||||||
|
|
|
||||||
LL | pub fn f(b: &mut i32) {
|
|
||||||
| ^^^^^^^^
|
|
||||||
help: try removing `&mut` here
|
help: try removing `&mut` here
|
||||||
|
|
|
|
||||||
LL - g(&mut &mut b);
|
LL - g(&mut &mut b);
|
||||||
@ -33,13 +27,13 @@ LL + g(&mut b);
|
|||||||
|
|
|
|
||||||
|
|
||||||
error[E0596]: cannot borrow `b` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `b` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:18:12
|
--> $DIR/mut-borrow-of-mut-ref.rs:17:12
|
||||||
|
|
|
|
||||||
LL | h(&mut &mut b);
|
LL | h(&mut &mut b);
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
|
||||||
note: the binding is already a mutable borrow
|
note: the binding is already a mutable borrow
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:17:13
|
--> $DIR/mut-borrow-of-mut-ref.rs:16:13
|
||||||
|
|
|
|
||||||
LL | pub fn g(b: &mut i32) {
|
LL | pub fn g(b: &mut i32) {
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
@ -50,7 +44,7 @@ LL + h(&mut b);
|
|||||||
|
|
|
|
||||||
|
|
||||||
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/mut-borrow-of-mut-ref.rs:35:5
|
--> $DIR/mut-borrow-of-mut-ref.rs:34:5
|
||||||
|
|
|
|
||||||
LL | f.bar();
|
LL | f.bar();
|
||||||
| ^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^ cannot borrow as mutable
|
||||||
@ -60,6 +54,6 @@ help: consider making the binding mutable
|
|||||||
LL | pub fn baz(mut f: &mut String) {
|
LL | pub fn baz(mut f: &mut String) {
|
||||||
| +++
|
| +++
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0596`.
|
For more information about this error, try `rustc --explain E0596`.
|
||||||
|
@ -50,9 +50,9 @@ fn ref_closure(mut x: (i32,)) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn imm_local(x: (i32,)) {
|
fn imm_local(x: (i32,)) { //~ ERROR
|
||||||
&mut x; //~ ERROR
|
&mut x;
|
||||||
&mut x.0; //~ ERROR
|
&mut x.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn imm_capture(x: (i32,)) {
|
fn imm_capture(x: (i32,)) {
|
||||||
|
@ -245,21 +245,19 @@ LL | &mut x.0;
|
|||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/mutability-errors.rs:54:5
|
--> $DIR/mutability-errors.rs:53:14
|
||||||
|
|
|
|
||||||
LL | fn imm_local(x: (i32,)) {
|
LL | fn imm_local(x: (i32,)) {
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
| ^ not mutable
|
||||||
LL | &mut x;
|
|
||||||
| ^^^^^^ cannot borrow as mutable
|
|
||||||
|
|
||||||
error[E0596]: cannot borrow `x.0` as mutable, as `x` is not declared as mutable
|
|
||||||
--> $DIR/mutability-errors.rs:55:5
|
|
||||||
|
|
|
||||||
LL | fn imm_local(x: (i32,)) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | &mut x;
|
LL | &mut x;
|
||||||
|
| ------ cannot borrow as mutable
|
||||||
LL | &mut x.0;
|
LL | &mut x.0;
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| -------- cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn imm_local(mut x: (i32,)) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0594]: cannot assign to `x`, as it is not declared as mutable
|
error[E0594]: cannot assign to `x`, as it is not declared as mutable
|
||||||
--> $DIR/mutability-errors.rs:60:9
|
--> $DIR/mutability-errors.rs:60:9
|
||||||
@ -357,7 +355,7 @@ error[E0596]: cannot borrow `X.0` as mutable, as `X` is an immutable static item
|
|||||||
LL | &mut X.0;
|
LL | &mut X.0;
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
||||||
error: aborting due to 38 previous errors
|
error: aborting due to 37 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0594, E0596.
|
Some errors have detailed explanations: E0594, E0596.
|
||||||
For more information about an error, try `rustc --explain E0594`.
|
For more information about an error, try `rustc --explain E0594`.
|
||||||
|
@ -11,11 +11,13 @@ LL | x.a = 1;
|
|||||||
error[E0594]: cannot assign to `x.b`, as `x` is not declared as mutable
|
error[E0594]: cannot assign to `x.b`, as `x` is not declared as mutable
|
||||||
--> $DIR/reassignment_immutable_fields_overlapping.rs:13:5
|
--> $DIR/reassignment_immutable_fields_overlapping.rs:13:5
|
||||||
|
|
|
|
||||||
LL | let x: Foo;
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x.a = 1;
|
|
||||||
LL | x.b = 22;
|
LL | x.b = 22;
|
||||||
| ^^^^^^^^ cannot assign
|
| ^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x: Foo;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
|
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
|
||||||
--> $DIR/reassignment_immutable_fields_twice.rs:7:5
|
--> $DIR/reassignment_immutable_fields_twice.rs:7:5
|
||||||
|
|
|
|
||||||
LL | let x: (u32, u32);
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x = (22, 44);
|
|
||||||
LL | x.0 = 1;
|
LL | x.0 = 1;
|
||||||
| ^^^^^^^ cannot assign
|
| ^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x: (u32, u32);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0381]: partially assigned binding `x` isn't fully initialized
|
error[E0381]: partially assigned binding `x` isn't fully initialized
|
||||||
--> $DIR/reassignment_immutable_fields_twice.rs:12:5
|
--> $DIR/reassignment_immutable_fields_twice.rs:12:5
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-80313-mutable-borrow-in-closure.rs:6:5
|
--> $DIR/issue-80313-mutable-borrow-in-closure.rs:6:5
|
||||||
|
|
|
|
||||||
LL | let callback = || {
|
|
||||||
| -------- help: consider changing this to be mutable: `mut callback`
|
|
||||||
LL | &mut my_var;
|
LL | &mut my_var;
|
||||||
| ------ calling `callback` requires mutable binding due to mutable borrow of `my_var`
|
| ------ calling `callback` requires mutable binding due to mutable borrow of `my_var`
|
||||||
LL | };
|
LL | };
|
||||||
LL | callback();
|
LL | callback();
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut callback = || {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-80313-mutable-borrow-in-move-closure.rs:6:5
|
--> $DIR/issue-80313-mutable-borrow-in-move-closure.rs:6:5
|
||||||
|
|
|
|
||||||
LL | let callback = move || {
|
|
||||||
| -------- help: consider changing this to be mutable: `mut callback`
|
|
||||||
LL | &mut my_var;
|
LL | &mut my_var;
|
||||||
| ------ calling `callback` requires mutable binding due to possible mutation of `my_var`
|
| ------ calling `callback` requires mutable binding due to possible mutation of `my_var`
|
||||||
LL | };
|
LL | };
|
||||||
LL | callback();
|
LL | callback();
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut callback = move || {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-80313-mutation-in-closure.rs:6:5
|
--> $DIR/issue-80313-mutation-in-closure.rs:6:5
|
||||||
|
|
|
|
||||||
LL | let callback = || {
|
|
||||||
| -------- help: consider changing this to be mutable: `mut callback`
|
|
||||||
LL | my_var = true;
|
LL | my_var = true;
|
||||||
| ------ calling `callback` requires mutable binding due to mutable borrow of `my_var`
|
| ------ calling `callback` requires mutable binding due to mutable borrow of `my_var`
|
||||||
LL | };
|
LL | };
|
||||||
LL | callback();
|
LL | callback();
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut callback = || {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `callback` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-80313-mutation-in-move-closure.rs:6:5
|
--> $DIR/issue-80313-mutation-in-move-closure.rs:6:5
|
||||||
|
|
|
|
||||||
LL | let callback = move || {
|
|
||||||
| -------- help: consider changing this to be mutable: `mut callback`
|
|
||||||
LL | my_var = true;
|
LL | my_var = true;
|
||||||
| ------ calling `callback` requires mutable binding due to possible mutation of `my_var`
|
| ------ calling `callback` requires mutable binding due to possible mutation of `my_var`
|
||||||
LL | };
|
LL | };
|
||||||
LL | callback();
|
LL | callback();
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut callback = move || {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -2,11 +2,14 @@ error[E0596]: cannot borrow `bar` as mutable, as it is not declared as mutable
|
|||||||
--> $DIR/issue-81700-mut-borrow.rs:3:5
|
--> $DIR/issue-81700-mut-borrow.rs:3:5
|
||||||
|
|
|
|
||||||
LL | let bar = || { foo(x); };
|
LL | let bar = || { foo(x); };
|
||||||
| --- - calling `bar` requires mutable binding due to mutable borrow of `x`
|
| - calling `bar` requires mutable binding due to mutable borrow of `x`
|
||||||
| |
|
|
||||||
| help: consider changing this to be mutable: `mut bar`
|
|
||||||
LL | bar();
|
LL | bar();
|
||||||
| ^^^ cannot borrow as mutable
|
| ^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut bar = || { foo(x); };
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `c` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `c` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-82438-mut-without-upvar.rs:27:27
|
--> $DIR/issue-82438-mut-without-upvar.rs:27:27
|
||||||
|
|
|
|
||||||
LL | let c = |a, b, c, d| {};
|
|
||||||
| - help: consider changing this to be mutable: `mut c`
|
|
||||||
LL |
|
|
||||||
LL | A.f(participant_name, &mut c);
|
LL | A.f(participant_name, &mut c);
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut c = |a, b, c, d| {};
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-84044-drop-non-mut.rs:5:10
|
--> $DIR/issue-84044-drop-non-mut.rs:5:10
|
||||||
|
|
|
|
||||||
LL | let f = || {};
|
|
||||||
| - help: consider changing this to be mutable: `mut f`
|
|
||||||
LL | drop(&mut f);
|
LL | drop(&mut f);
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut f = || {};
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/huge_multispan_highlight.rs:90:13
|
--> $DIR/huge_multispan_highlight.rs:90:13
|
||||||
|
|
|
|
||||||
LL | let x = "foo";
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
...
|
|
||||||
LL | let y = &mut x;
|
LL | let y = &mut x;
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x = "foo";
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,26 +1,35 @@
|
|||||||
error[E0596]: cannot borrow `f.v` as mutable, as `f` is not declared as mutable
|
error[E0596]: cannot borrow `f.v` as mutable, as `f` is not declared as mutable
|
||||||
--> $DIR/issue-35937.rs:7:5
|
--> $DIR/issue-35937.rs:7:5
|
||||||
|
|
|
|
||||||
LL | let f = Foo { v: Vec::new() };
|
|
||||||
| - help: consider changing this to be mutable: `mut f`
|
|
||||||
LL | f.v.push("cat".to_string());
|
LL | f.v.push("cat".to_string());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut f = Foo { v: Vec::new() };
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0594]: cannot assign to `s.x`, as `s` is not declared as mutable
|
error[E0594]: cannot assign to `s.x`, as `s` is not declared as mutable
|
||||||
--> $DIR/issue-35937.rs:16:5
|
--> $DIR/issue-35937.rs:16:5
|
||||||
|
|
|
|
||||||
LL | let s = S { x: 42 };
|
|
||||||
| - help: consider changing this to be mutable: `mut s`
|
|
||||||
LL | s.x += 1;
|
LL | s.x += 1;
|
||||||
| ^^^^^^^^ cannot assign
|
| ^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut s = S { x: 42 };
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0594]: cannot assign to `s.x`, as `s` is not declared as mutable
|
error[E0594]: cannot assign to `s.x`, as `s` is not declared as mutable
|
||||||
--> $DIR/issue-35937.rs:20:5
|
--> $DIR/issue-35937.rs:20:5
|
||||||
|
|
|
|
||||||
LL | fn bar(s: S) {
|
|
||||||
| - help: consider changing this to be mutable: `mut s`
|
|
||||||
LL | s.x += 1;
|
LL | s.x += 1;
|
||||||
| ^^^^^^^^ cannot assign
|
| ^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn bar(mut s: S) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `z.x` as mutable, as `z` is not declared as mutable
|
error[E0596]: cannot borrow `z.x` as mutable, as `z` is not declared as mutable
|
||||||
--> $DIR/issue-39544.rs:11:13
|
--> $DIR/issue-39544.rs:11:13
|
||||||
|
|
|
|
||||||
LL | let z = Z { x: X::Y };
|
|
||||||
| - help: consider changing this to be mutable: `mut z`
|
|
||||||
LL | let _ = &mut z.x;
|
LL | let _ = &mut z.x;
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut z = Z { x: X::Y };
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `self.x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `self.x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/issue-39544.rs:16:17
|
--> $DIR/issue-39544.rs:16:17
|
||||||
@ -97,10 +100,13 @@ LL | fn foo4(other: &mut Z) {
|
|||||||
error[E0596]: cannot borrow `z.x` as mutable, as `z` is not declared as mutable
|
error[E0596]: cannot borrow `z.x` as mutable, as `z` is not declared as mutable
|
||||||
--> $DIR/issue-39544.rs:41:13
|
--> $DIR/issue-39544.rs:41:13
|
||||||
|
|
|
|
||||||
LL | pub fn with_arg(z: Z, w: &Z) {
|
|
||||||
| - help: consider changing this to be mutable: `mut z`
|
|
||||||
LL | let _ = &mut z.x;
|
LL | let _ = &mut z.x;
|
||||||
| ^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | pub fn with_arg(mut z: Z, w: &Z) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `w.x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `w.x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/issue-39544.rs:42:13
|
--> $DIR/issue-39544.rs:42:13
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/E0596.rs:3:13
|
--> $DIR/E0596.rs:3:13
|
||||||
|
|
|
|
||||||
LL | let x = 1;
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | let y = &mut x;
|
LL | let y = &mut x;
|
||||||
| ^^^^^^ cannot borrow as mutable
|
| ^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x = 1;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `*x` as mutable, as `x` is not declared as mutable
|
error[E0596]: cannot borrow `*x` as mutable, as `x` is not declared as mutable
|
||||||
--> $DIR/issue-36400.rs:5:7
|
--> $DIR/issue-36400.rs:5:7
|
||||||
|
|
|
|
||||||
LL | let x = Box::new(3);
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | f(&mut *x);
|
LL | f(&mut *x);
|
||||||
| ^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut x = Box::new(3);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -16,10 +16,13 @@ LL | fn foo<'a>(x:fn(&u8, &u8), y: Vec<&'a u8>, z: &'a u8) {
|
|||||||
error[E0596]: cannot borrow `y` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `y` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/ex3-both-anon-regions-using-fn-items.rs:2:3
|
--> $DIR/ex3-both-anon-regions-using-fn-items.rs:2:3
|
||||||
|
|
|
|
||||||
LL | fn foo(x:fn(&u8, &u8), y: Vec<&u8>, z: &u8) {
|
|
||||||
| - help: consider changing this to be mutable: `mut y`
|
|
||||||
LL | y.push(z);
|
LL | y.push(z);
|
||||||
| ^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn foo(x:fn(&u8, &u8), mut y: Vec<&u8>, z: &u8) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -16,10 +16,13 @@ LL | fn foo<'a>(x:Box<dyn Fn(&u8, &u8)> , y: Vec<&'a u8>, z: &'a u8) {
|
|||||||
error[E0596]: cannot borrow `y` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `y` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/ex3-both-anon-regions-using-trait-objects.rs:2:3
|
--> $DIR/ex3-both-anon-regions-using-trait-objects.rs:2:3
|
||||||
|
|
|
|
||||||
LL | fn foo(x:Box<dyn Fn(&u8, &u8)> , y: Vec<&u8>, z: &u8) {
|
|
||||||
| - help: consider changing this to be mutable: `mut y`
|
|
||||||
LL | y.push(z);
|
LL | y.push(z);
|
||||||
| ^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn foo(x:Box<dyn Fn(&u8, &u8)> , mut y: Vec<&u8>, z: &u8) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
error[E0596]: cannot borrow `foo` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `foo` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/span-covering-argument-1.rs:5:14
|
--> $DIR/span-covering-argument-1.rs:5:14
|
||||||
|
|
|
|
||||||
LL | let $s = 0;
|
|
||||||
| -- help: consider changing this to be mutable: `mut foo`
|
|
||||||
LL | *&mut $s = 0;
|
LL | *&mut $s = 0;
|
||||||
| ^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^ cannot borrow as mutable
|
||||||
...
|
...
|
||||||
@ -10,6 +8,10 @@ LL | bad!(foo whatever);
|
|||||||
| ------------------ in this macro invocation
|
| ------------------ in this macro invocation
|
||||||
|
|
|
|
||||||
= note: this error originates in the macro `bad` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `bad` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut $s = 0;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ impl S {
|
|||||||
|
|
||||||
fn func(arg: S) {
|
fn func(arg: S) {
|
||||||
//~^ HELP consider changing this to be mutable
|
//~^ HELP consider changing this to be mutable
|
||||||
//~| SUGGESTION mut arg
|
//~| SUGGESTION mut
|
||||||
arg.mutate();
|
arg.mutate();
|
||||||
//~^ ERROR cannot borrow `arg` as mutable, as it is not declared as mutable
|
//~^ ERROR cannot borrow `arg` as mutable, as it is not declared as mutable
|
||||||
}
|
}
|
||||||
@ -16,7 +16,7 @@ fn func(arg: S) {
|
|||||||
fn main() {
|
fn main() {
|
||||||
let local = S;
|
let local = S;
|
||||||
//~^ HELP consider changing this to be mutable
|
//~^ HELP consider changing this to be mutable
|
||||||
//~| SUGGESTION mut local
|
//~| SUGGESTION mut
|
||||||
local.mutate();
|
local.mutate();
|
||||||
//~^ ERROR cannot borrow `local` as mutable, as it is not declared as mutable
|
//~^ ERROR cannot borrow `local` as mutable, as it is not declared as mutable
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/mut-suggestion.rs:12:5
|
--> $DIR/mut-suggestion.rs:12:5
|
||||||
|
|
|
|
||||||
LL | fn func(arg: S) {
|
|
||||||
| --- help: consider changing this to be mutable: `mut arg`
|
|
||||||
...
|
|
||||||
LL | arg.mutate();
|
LL | arg.mutate();
|
||||||
| ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn func(mut arg: S) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `local` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `local` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/mut-suggestion.rs:20:5
|
--> $DIR/mut-suggestion.rs:20:5
|
||||||
|
|
|
|
||||||
LL | let local = S;
|
|
||||||
| ----- help: consider changing this to be mutable: `mut local`
|
|
||||||
...
|
|
||||||
LL | local.mutate();
|
LL | local.mutate();
|
||||||
| ^^^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut local = S;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0594]: cannot assign to `nyan.how_hungry`, as `nyan` is not declared as mutable
|
error[E0594]: cannot assign to `nyan.how_hungry`, as `nyan` is not declared as mutable
|
||||||
--> $DIR/mutable-class-fields.rs:15:3
|
--> $DIR/mutable-class-fields.rs:15:3
|
||||||
|
|
|
|
||||||
LL | let nyan : Cat = cat(52, 99);
|
|
||||||
| ---- help: consider changing this to be mutable: `mut nyan`
|
|
||||||
LL | nyan.how_hungry = 0;
|
LL | nyan.how_hungry = 0;
|
||||||
| ^^^^^^^^^^^^^^^^^^^ cannot assign
|
| ^^^^^^^^^^^^^^^^^^^ cannot assign
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut nyan : Cat = cat(52, 99);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -30,10 +30,13 @@ LL | (&mut self).bar();
|
|||||||
error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-51191.rs:13:9
|
--> $DIR/issue-51191.rs:13:9
|
||||||
|
|
|
|
||||||
LL | fn imm(self) {
|
|
||||||
| ---- help: consider changing this to be mutable: `mut self`
|
|
||||||
LL | (&mut self).bar();
|
LL | (&mut self).bar();
|
||||||
| ^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn imm(mut self) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/issue-51191.rs:22:9
|
--> $DIR/issue-51191.rs:22:9
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
error[E0596]: cannot borrow `not_mut` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `not_mut` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/nested-binding-modes-mut.rs:4:5
|
--> $DIR/nested-binding-modes-mut.rs:4:5
|
||||||
|
|
|
|
||||||
LL | let mut is_mut @ not_mut = 42;
|
|
||||||
| ------- help: consider changing this to be mutable: `mut not_mut`
|
|
||||||
LL | &mut is_mut;
|
|
||||||
LL | &mut not_mut;
|
LL | &mut not_mut;
|
||||||
| ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut is_mut @ mut not_mut = 42;
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `not_mut` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `not_mut` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/nested-binding-modes-mut.rs:9:5
|
--> $DIR/nested-binding-modes-mut.rs:9:5
|
||||||
|
|
|
|
||||||
LL | let not_mut @ mut is_mut = 42;
|
|
||||||
| ------- help: consider changing this to be mutable: `mut not_mut`
|
|
||||||
LL | &mut is_mut;
|
|
||||||
LL | &mut not_mut;
|
LL | &mut not_mut;
|
||||||
| ^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut not_mut @ mut is_mut = 42;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:53:24
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:53:24
|
||||||
|
|
|
|
||||||
LL | fn deref_mut_field1(x: Own<Point>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | let __isize = &mut x.y;
|
LL | let __isize = &mut x.y;
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn deref_mut_field1(mut x: Own<Point>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:65:10
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:65:10
|
||||||
@ -30,10 +33,13 @@ LL | use_mut(_x);
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:88:5
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:88:5
|
||||||
|
|
|
|
||||||
LL | fn assign_field1<'a>(x: Own<Point>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x.y = 3;
|
LL | x.y = 3;
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn assign_field1<'a>(mut x: Own<Point>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:92:5
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:92:5
|
||||||
@ -59,10 +65,13 @@ LL | use_mut(_p);
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:109:5
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:109:5
|
||||||
|
|
|
|
||||||
LL | fn deref_mut_method1(x: Own<Point>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x.set(0, 0);
|
LL | x.set(0, 0);
|
||||||
| ^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn deref_mut_method1(mut x: Own<Point>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:121:5
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:121:5
|
||||||
@ -78,10 +87,13 @@ LL | fn deref_extend_mut_method1(x: &mut Own<Point>) -> &mut isize {
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:129:6
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:129:6
|
||||||
|
|
|
|
||||||
LL | fn assign_method1<'a>(x: Own<Point>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | *x.y_mut() = 3;
|
LL | *x.y_mut() = 3;
|
||||||
| ^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn assign_method1<'a>(mut x: Own<Point>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:133:6
|
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:133:6
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:29:25
|
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:29:25
|
||||||
|
|
|
|
||||||
LL | fn deref_mut1(x: Own<isize>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | let __isize = &mut *x;
|
LL | let __isize = &mut *x;
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn deref_mut1(mut x: Own<isize>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:41:11
|
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:41:11
|
||||||
@ -20,10 +23,13 @@ LL | fn deref_extend_mut1<'a>(x: &'a mut Own<isize>) -> &'a mut isize {
|
|||||||
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:49:6
|
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:49:6
|
||||||
|
|
|
|
||||||
LL | fn assign1<'a>(x: Own<isize>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | *x = 3;
|
LL | *x = 3;
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn assign1<'a>(mut x: Own<isize>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
error[E0596]: cannot borrow `*x` as mutable, as it is behind a `&` reference
|
||||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:53:6
|
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:53:6
|
||||||
|
@ -12,11 +12,13 @@ LL | fn borrowed_receiver(x: &mut dyn Foo) {
|
|||||||
error[E0596]: cannot borrow `*x` as mutable, as `x` is not declared as mutable
|
error[E0596]: cannot borrow `*x` as mutable, as `x` is not declared as mutable
|
||||||
--> $DIR/borrowck-object-mutability.rs:18:5
|
--> $DIR/borrowck-object-mutability.rs:18:5
|
||||||
|
|
|
|
||||||
LL | fn owned_receiver(x: Box<dyn Foo>) {
|
|
||||||
| - help: consider changing this to be mutable: `mut x`
|
|
||||||
LL | x.borrowed();
|
|
||||||
LL | x.borrowed_mut();
|
LL | x.borrowed_mut();
|
||||||
| ^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
| ^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | fn owned_receiver(mut x: Box<dyn Foo>) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -12,13 +12,16 @@ LL | tick1();
|
|||||||
error[E0596]: cannot borrow `tick2` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `tick2` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/unboxed-closures-infer-fnmut-calling-fnmut-no-mut.rs:19:5
|
--> $DIR/unboxed-closures-infer-fnmut-calling-fnmut-no-mut.rs:19:5
|
||||||
|
|
|
|
||||||
LL | let tick2 = || {
|
|
||||||
| ----- help: consider changing this to be mutable: `mut tick2`
|
|
||||||
LL | tick1();
|
LL | tick1();
|
||||||
| ----- calling `tick2` requires mutable binding due to mutable borrow of `tick1`
|
| ----- calling `tick2` requires mutable binding due to mutable borrow of `tick1`
|
||||||
...
|
...
|
||||||
LL | tick2();
|
LL | tick2();
|
||||||
| ^^^^^ cannot borrow as mutable
|
| ^^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut tick2 = || {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -2,11 +2,14 @@ error[E0596]: cannot borrow `tick` as mutable, as it is not declared as mutable
|
|||||||
--> $DIR/unboxed-closures-infer-fnmut-missing-mut.rs:7:5
|
--> $DIR/unboxed-closures-infer-fnmut-missing-mut.rs:7:5
|
||||||
|
|
|
|
||||||
LL | let tick = || counter += 1;
|
LL | let tick = || counter += 1;
|
||||||
| ---- ------- calling `tick` requires mutable binding due to mutable borrow of `counter`
|
| ------- calling `tick` requires mutable binding due to mutable borrow of `counter`
|
||||||
| |
|
|
||||||
| help: consider changing this to be mutable: `mut tick`
|
|
||||||
LL | tick();
|
LL | tick();
|
||||||
| ^^^^ cannot borrow as mutable
|
| ^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut tick = || counter += 1;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -2,11 +2,14 @@ error[E0596]: cannot borrow `tick` as mutable, as it is not declared as mutable
|
|||||||
--> $DIR/unboxed-closures-infer-fnmut-move-missing-mut.rs:7:5
|
--> $DIR/unboxed-closures-infer-fnmut-move-missing-mut.rs:7:5
|
||||||
|
|
|
|
||||||
LL | let tick = move || counter += 1;
|
LL | let tick = move || counter += 1;
|
||||||
| ---- ------- calling `tick` requires mutable binding due to possible mutation of `counter`
|
| ------- calling `tick` requires mutable binding due to possible mutation of `counter`
|
||||||
| |
|
|
||||||
| help: consider changing this to be mutable: `mut tick`
|
|
||||||
LL | tick();
|
LL | tick();
|
||||||
| ^^^^ cannot borrow as mutable
|
| ^^^^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut tick = move || counter += 1;
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
|
||||||
--> $DIR/writing-to-immutable-vec.rs:3:5
|
--> $DIR/writing-to-immutable-vec.rs:3:5
|
||||||
|
|
|
|
||||||
LL | let v: Vec<isize> = vec![1, 2, 3];
|
|
||||||
| - help: consider changing this to be mutable: `mut v`
|
|
||||||
LL | v[1] = 4;
|
LL | v[1] = 4;
|
||||||
| ^ cannot borrow as mutable
|
| ^ cannot borrow as mutable
|
||||||
|
|
|
||||||
|
help: consider changing this to be mutable
|
||||||
|
|
|
||||||
|
LL | let mut v: Vec<isize> = vec![1, 2, 3];
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user