summaryrefslogtreecommitdiffstats
path: root/tests/ui/borrowck
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/borrowck')
-rw-r--r--tests/ui/borrowck/async-reference-generality.rs3
-rw-r--r--tests/ui/borrowck/async-reference-generality.stderr27
-rw-r--r--tests/ui/borrowck/erase-error-in-mir-drop-tracking.rs23
-rw-r--r--tests/ui/borrowck/erase-error-in-mir-drop-tracking.stderr24
-rw-r--r--tests/ui/borrowck/issue-114374-invalid-help-fmt-args.rs16
-rw-r--r--tests/ui/borrowck/issue-114374-invalid-help-fmt-args.stderr33
-rw-r--r--tests/ui/borrowck/issue-115259-suggest-iter-mut.fixed20
-rw-r--r--tests/ui/borrowck/issue-115259-suggest-iter-mut.rs20
-rw-r--r--tests/ui/borrowck/issue-115259-suggest-iter-mut.stderr16
-rw-r--r--tests/ui/borrowck/issue-53432-nested-closure-outlives-borrowed-value.stderr2
-rw-r--r--tests/ui/borrowck/issue-62387-suggest-iter-mut-2.fixed36
-rw-r--r--tests/ui/borrowck/issue-62387-suggest-iter-mut-2.rs36
-rw-r--r--tests/ui/borrowck/issue-62387-suggest-iter-mut-2.stderr16
-rw-r--r--tests/ui/borrowck/issue-62387-suggest-iter-mut.fixed30
-rw-r--r--tests/ui/borrowck/issue-62387-suggest-iter-mut.rs30
-rw-r--r--tests/ui/borrowck/issue-62387-suggest-iter-mut.stderr29
-rw-r--r--tests/ui/borrowck/issue-81899.stderr4
-rw-r--r--tests/ui/borrowck/issue-88434-minimal-example.stderr4
-rw-r--r--tests/ui/borrowck/issue-88434-removal-index-should-be-less.stderr4
-rw-r--r--tests/ui/borrowck/issue-92157.rs2
-rw-r--r--tests/ui/borrowck/issue-92157.stderr9
-rw-r--r--tests/ui/borrowck/issue-95079-missing-move-in-nested-closure.stderr2
-rw-r--r--tests/ui/borrowck/suggest-mut-iterator.fixed30
-rw-r--r--tests/ui/borrowck/suggest-mut-iterator.rs30
-rw-r--r--tests/ui/borrowck/suggest-mut-iterator.stderr16
25 files changed, 373 insertions, 89 deletions
diff --git a/tests/ui/borrowck/async-reference-generality.rs b/tests/ui/borrowck/async-reference-generality.rs
index 487d1ac81..668df9ea7 100644
--- a/tests/ui/borrowck/async-reference-generality.rs
+++ b/tests/ui/borrowck/async-reference-generality.rs
@@ -1,5 +1,4 @@
-// check-fail
-// known-bug: #99492
+// check-pass
// edition: 2021
use std::marker::PhantomData;
diff --git a/tests/ui/borrowck/async-reference-generality.stderr b/tests/ui/borrowck/async-reference-generality.stderr
deleted file mode 100644
index af720ad29..000000000
--- a/tests/ui/borrowck/async-reference-generality.stderr
+++ /dev/null
@@ -1,27 +0,0 @@
-error[E0308]: mismatched types
- --> $DIR/async-reference-generality.rs:23:5
- |
-LL | / async {
-LL | | let _x = Struct::<Empty<&'static ()>, _>(PhantomData);
-LL | | async {}.await;
-LL | | }
- | |_____^ one type is more general than the other
- |
- = note: expected reference `&()`
- found reference `&()`
-
-error[E0308]: mismatched types
- --> $DIR/async-reference-generality.rs:23:5
- |
-LL | / async {
-LL | | let _x = Struct::<Empty<&'static ()>, _>(PhantomData);
-LL | | async {}.await;
-LL | | }
- | |_____^ one type is more general than the other
- |
- = note: expected reference `&()`
- found reference `&()`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/borrowck/erase-error-in-mir-drop-tracking.rs b/tests/ui/borrowck/erase-error-in-mir-drop-tracking.rs
deleted file mode 100644
index addbe5d65..000000000
--- a/tests/ui/borrowck/erase-error-in-mir-drop-tracking.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// compile-flags: -Zdrop-tracking-mir
-// edition:2021
-
-use std::future::Future;
-
-trait Client {
- type Connecting<'a>: Future + Send
- where
- Self: 'a;
-
- fn connect(&'_ self) -> Self::Connecting<'a>;
- //~^ ERROR use of undeclared lifetime name `'a`
-}
-
-fn call_connect<C>(c: &'_ C) -> impl '_ + Future + Send
-where
- C: Client + Send + Sync,
-{
- async move { c.connect().await }
- //~^ ERROR `C` does not live long enough
-}
-
-fn main() {}
diff --git a/tests/ui/borrowck/erase-error-in-mir-drop-tracking.stderr b/tests/ui/borrowck/erase-error-in-mir-drop-tracking.stderr
deleted file mode 100644
index 53abe3dc9..000000000
--- a/tests/ui/borrowck/erase-error-in-mir-drop-tracking.stderr
+++ /dev/null
@@ -1,24 +0,0 @@
-error[E0261]: use of undeclared lifetime name `'a`
- --> $DIR/erase-error-in-mir-drop-tracking.rs:11:46
- |
-LL | fn connect(&'_ self) -> Self::Connecting<'a>;
- | ^^ undeclared lifetime
- |
-help: consider introducing lifetime `'a` here
- |
-LL | fn connect<'a>(&'_ self) -> Self::Connecting<'a>;
- | ++++
-help: consider introducing lifetime `'a` here
- |
-LL | trait Client<'a> {
- | ++++
-
-error: `C` does not live long enough
- --> $DIR/erase-error-in-mir-drop-tracking.rs:19:5
- |
-LL | async move { c.connect().await }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0261`.
diff --git a/tests/ui/borrowck/issue-114374-invalid-help-fmt-args.rs b/tests/ui/borrowck/issue-114374-invalid-help-fmt-args.rs
new file mode 100644
index 000000000..4a6c2f9ed
--- /dev/null
+++ b/tests/ui/borrowck/issue-114374-invalid-help-fmt-args.rs
@@ -0,0 +1,16 @@
+#![allow(dead_code)]
+
+fn bar<'a>(_: std::fmt::Arguments<'a>) {}
+fn main() {
+ let x = format_args!("a {} {} {}.", 1, format_args!("b{}!", 2), 3);
+ //~^ ERROR temporary value dropped while borrowed
+
+ bar(x);
+
+ let foo = format_args!("{}", "hi");
+ //~^ ERROR temporary value dropped while borrowed
+ bar(foo);
+
+ let foo = format_args!("hi"); // no placeholder in arguments, so no error
+ bar(foo);
+}
diff --git a/tests/ui/borrowck/issue-114374-invalid-help-fmt-args.stderr b/tests/ui/borrowck/issue-114374-invalid-help-fmt-args.stderr
new file mode 100644
index 000000000..8221505b1
--- /dev/null
+++ b/tests/ui/borrowck/issue-114374-invalid-help-fmt-args.stderr
@@ -0,0 +1,33 @@
+error[E0716]: temporary value dropped while borrowed
+ --> $DIR/issue-114374-invalid-help-fmt-args.rs:5:13
+ |
+LL | let x = format_args!("a {} {} {}.", 1, format_args!("b{}!", 2), 3);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- temporary value is freed at the end of this statement
+ | |
+ | creates a temporary value which is freed while still in use
+...
+LL | bar(x);
+ | - borrow later used here
+ |
+ = note: the result of `format_args!` can only be assigned directly if no placeholders in it's arguments are used
+ = note: to learn more, visit <https://doc.rust-lang.org/std/macro.format_args.html>
+ = note: this error originates in the macro `format_args` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0716]: temporary value dropped while borrowed
+ --> $DIR/issue-114374-invalid-help-fmt-args.rs:10:15
+ |
+LL | let foo = format_args!("{}", "hi");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^- temporary value is freed at the end of this statement
+ | |
+ | creates a temporary value which is freed while still in use
+LL |
+LL | bar(foo);
+ | --- borrow later used here
+ |
+ = note: the result of `format_args!` can only be assigned directly if no placeholders in it's arguments are used
+ = note: to learn more, visit <https://doc.rust-lang.org/std/macro.format_args.html>
+ = note: this error originates in the macro `format_args` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0716`.
diff --git a/tests/ui/borrowck/issue-115259-suggest-iter-mut.fixed b/tests/ui/borrowck/issue-115259-suggest-iter-mut.fixed
new file mode 100644
index 000000000..4653fe737
--- /dev/null
+++ b/tests/ui/borrowck/issue-115259-suggest-iter-mut.fixed
@@ -0,0 +1,20 @@
+// run-rustfix
+#![allow(unused_mut)]
+#![allow(dead_code)]
+
+pub trait Layer {
+ fn process(&mut self) -> u32;
+}
+
+pub struct State {
+ layers: Vec<Box<dyn Layer>>,
+}
+
+impl State {
+ pub fn process(&mut self) -> u32 {
+ self.layers.iter_mut().fold(0, |result, mut layer| result + layer.process())
+ //~^ ERROR cannot borrow `**layer` as mutable, as it is behind a `&` reference
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-115259-suggest-iter-mut.rs b/tests/ui/borrowck/issue-115259-suggest-iter-mut.rs
new file mode 100644
index 000000000..e0f6ab132
--- /dev/null
+++ b/tests/ui/borrowck/issue-115259-suggest-iter-mut.rs
@@ -0,0 +1,20 @@
+// run-rustfix
+#![allow(unused_mut)]
+#![allow(dead_code)]
+
+pub trait Layer {
+ fn process(&mut self) -> u32;
+}
+
+pub struct State {
+ layers: Vec<Box<dyn Layer>>,
+}
+
+impl State {
+ pub fn process(&mut self) -> u32 {
+ self.layers.iter().fold(0, |result, mut layer| result + layer.process())
+ //~^ ERROR cannot borrow `**layer` as mutable, as it is behind a `&` reference
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-115259-suggest-iter-mut.stderr b/tests/ui/borrowck/issue-115259-suggest-iter-mut.stderr
new file mode 100644
index 000000000..7e0fc2cf2
--- /dev/null
+++ b/tests/ui/borrowck/issue-115259-suggest-iter-mut.stderr
@@ -0,0 +1,16 @@
+error[E0596]: cannot borrow `**layer` as mutable, as it is behind a `&` reference
+ --> $DIR/issue-115259-suggest-iter-mut.rs:15:65
+ |
+LL | self.layers.iter().fold(0, |result, mut layer| result + layer.process())
+ | --------- ^^^^^ `layer` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ | |
+ | consider changing this binding's type to be: `&mut Box<dyn Layer>`
+ |
+help: you may want to use `iter_mut` here
+ |
+LL | self.layers.iter_mut().fold(0, |result, mut layer| result + layer.process())
+ | ~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/borrowck/issue-53432-nested-closure-outlives-borrowed-value.stderr b/tests/ui/borrowck/issue-53432-nested-closure-outlives-borrowed-value.stderr
index f0b574846..3debfb62c 100644
--- a/tests/ui/borrowck/issue-53432-nested-closure-outlives-borrowed-value.stderr
+++ b/tests/ui/borrowck/issue-53432-nested-closure-outlives-borrowed-value.stderr
@@ -4,7 +4,7 @@ error: lifetime may not live long enough
LL | let _action = move || {
| -------
| | |
- | | return type of closure `[closure@$DIR/issue-53432-nested-closure-outlives-borrowed-value.rs:4:9: 4:11]` contains a lifetime `'2`
+ | | return type of closure `{closure@$DIR/issue-53432-nested-closure-outlives-borrowed-value.rs:4:9: 4:11}` contains a lifetime `'2`
| lifetime `'1` represents this closure's body
LL | || f() // The `nested` closure
| ^^^^^^ returning this value requires that `'1` must outlive `'2`
diff --git a/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.fixed b/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.fixed
new file mode 100644
index 000000000..f02374d8e
--- /dev/null
+++ b/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.fixed
@@ -0,0 +1,36 @@
+// run-rustfix
+#![allow(unused_mut)]
+#![allow(dead_code)]
+use std::path::PathBuf;
+
+#[derive(Clone)]
+struct Container {
+ things: Vec<PathBuf>,
+}
+
+impl Container {
+ fn things(&mut self) -> &[PathBuf] {
+ &self.things
+ }
+}
+
+// contains containers
+struct ContainerContainer {
+ contained: Vec<Container>,
+}
+
+impl ContainerContainer {
+ fn contained(&self) -> &[Container] {
+ &self.contained
+ }
+
+ fn all_the_things(&mut self) -> &[PathBuf] {
+ let mut vec = self.contained.clone();
+ let _a =
+ vec.iter_mut().flat_map(|container| container.things()).cloned().collect::<Vec<PathBuf>>();
+ //~^ ERROR cannot borrow `*container` as mutable, as it is behind a `&` reference
+ unimplemented!();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.rs b/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.rs
new file mode 100644
index 000000000..2d0b837a9
--- /dev/null
+++ b/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.rs
@@ -0,0 +1,36 @@
+// run-rustfix
+#![allow(unused_mut)]
+#![allow(dead_code)]
+use std::path::PathBuf;
+
+#[derive(Clone)]
+struct Container {
+ things: Vec<PathBuf>,
+}
+
+impl Container {
+ fn things(&mut self) -> &[PathBuf] {
+ &self.things
+ }
+}
+
+// contains containers
+struct ContainerContainer {
+ contained: Vec<Container>,
+}
+
+impl ContainerContainer {
+ fn contained(&self) -> &[Container] {
+ &self.contained
+ }
+
+ fn all_the_things(&mut self) -> &[PathBuf] {
+ let mut vec = self.contained.clone();
+ let _a =
+ vec.iter().flat_map(|container| container.things()).cloned().collect::<Vec<PathBuf>>();
+ //~^ ERROR cannot borrow `*container` as mutable, as it is behind a `&` reference
+ unimplemented!();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.stderr b/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.stderr
new file mode 100644
index 000000000..19f194100
--- /dev/null
+++ b/tests/ui/borrowck/issue-62387-suggest-iter-mut-2.stderr
@@ -0,0 +1,16 @@
+error[E0596]: cannot borrow `*container` as mutable, as it is behind a `&` reference
+ --> $DIR/issue-62387-suggest-iter-mut-2.rs:30:45
+ |
+LL | vec.iter().flat_map(|container| container.things()).cloned().collect::<Vec<PathBuf>>();
+ | --------- ^^^^^^^^^ `container` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ | |
+ | consider changing this binding's type to be: `&mut Container`
+ |
+help: you may want to use `iter_mut` here
+ |
+LL | vec.iter_mut().flat_map(|container| container.things()).cloned().collect::<Vec<PathBuf>>();
+ | ~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/borrowck/issue-62387-suggest-iter-mut.fixed b/tests/ui/borrowck/issue-62387-suggest-iter-mut.fixed
new file mode 100644
index 000000000..8bf2625de
--- /dev/null
+++ b/tests/ui/borrowck/issue-62387-suggest-iter-mut.fixed
@@ -0,0 +1,30 @@
+// run-rustfix
+#![allow(unused_mut)]
+#![allow(dead_code)]
+
+#[derive(Debug)]
+struct A {
+ a: i32,
+}
+
+impl A {
+ fn double(&mut self) {
+ self.a += self.a
+ }
+}
+
+fn baz() {
+ let mut v = [A { a: 4 }];
+ v.iter_mut().for_each(|a| a.double());
+ //~^ ERROR cannot borrow `*a` as mutable, as it is behind a `&` reference
+ println!("{:?}", v);
+}
+
+fn bar() {
+ let mut v = [A { a: 4 }];
+ v.iter_mut().rev().rev().for_each(|a| a.double());
+ //~^ ERROR cannot borrow `*a` as mutable, as it is behind a `&` reference
+ println!("{:?}", v);
+}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-62387-suggest-iter-mut.rs b/tests/ui/borrowck/issue-62387-suggest-iter-mut.rs
new file mode 100644
index 000000000..39bc30bf2
--- /dev/null
+++ b/tests/ui/borrowck/issue-62387-suggest-iter-mut.rs
@@ -0,0 +1,30 @@
+// run-rustfix
+#![allow(unused_mut)]
+#![allow(dead_code)]
+
+#[derive(Debug)]
+struct A {
+ a: i32,
+}
+
+impl A {
+ fn double(&mut self) {
+ self.a += self.a
+ }
+}
+
+fn baz() {
+ let mut v = [A { a: 4 }];
+ v.iter().for_each(|a| a.double());
+ //~^ ERROR cannot borrow `*a` as mutable, as it is behind a `&` reference
+ println!("{:?}", v);
+}
+
+fn bar() {
+ let mut v = [A { a: 4 }];
+ v.iter().rev().rev().for_each(|a| a.double());
+ //~^ ERROR cannot borrow `*a` as mutable, as it is behind a `&` reference
+ println!("{:?}", v);
+}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-62387-suggest-iter-mut.stderr b/tests/ui/borrowck/issue-62387-suggest-iter-mut.stderr
new file mode 100644
index 000000000..fd58e4330
--- /dev/null
+++ b/tests/ui/borrowck/issue-62387-suggest-iter-mut.stderr
@@ -0,0 +1,29 @@
+error[E0596]: cannot borrow `*a` as mutable, as it is behind a `&` reference
+ --> $DIR/issue-62387-suggest-iter-mut.rs:18:27
+ |
+LL | v.iter().for_each(|a| a.double());
+ | - ^ `a` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ | |
+ | consider changing this binding's type to be: `&mut A`
+ |
+help: you may want to use `iter_mut` here
+ |
+LL | v.iter_mut().for_each(|a| a.double());
+ | ~~~~~~~~
+
+error[E0596]: cannot borrow `*a` as mutable, as it is behind a `&` reference
+ --> $DIR/issue-62387-suggest-iter-mut.rs:25:39
+ |
+LL | v.iter().rev().rev().for_each(|a| a.double());
+ | - ^ `a` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ | |
+ | consider changing this binding's type to be: `&mut A`
+ |
+help: you may want to use `iter_mut` here
+ |
+LL | v.iter_mut().rev().rev().for_each(|a| a.double());
+ | ~~~~~~~~
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/borrowck/issue-81899.stderr b/tests/ui/borrowck/issue-81899.stderr
index 1b03bc3af..5ff33933c 100644
--- a/tests/ui/borrowck/issue-81899.stderr
+++ b/tests/ui/borrowck/issue-81899.stderr
@@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed
LL | panic!()
| ^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/issue-81899.rs:11:5
|
-note: inside `f::<[closure@$DIR/issue-81899.rs:4:31: 4:34]>`
+note: inside `f::<{closure@$DIR/issue-81899.rs:4:31: 4:34}>`
--> $DIR/issue-81899.rs:11:5
|
LL | panic!()
@@ -16,7 +16,7 @@ LL | const _CONST: &[u8] = &f(&[], |_| {});
| ^^^^^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
-note: erroneous constant used
+note: erroneous constant encountered
--> $DIR/issue-81899.rs:4:23
|
LL | const _CONST: &[u8] = &f(&[], |_| {});
diff --git a/tests/ui/borrowck/issue-88434-minimal-example.stderr b/tests/ui/borrowck/issue-88434-minimal-example.stderr
index a5a571c6d..7b785b25b 100644
--- a/tests/ui/borrowck/issue-88434-minimal-example.stderr
+++ b/tests/ui/borrowck/issue-88434-minimal-example.stderr
@@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed
LL | panic!()
| ^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/issue-88434-minimal-example.rs:10:5
|
-note: inside `f::<[closure@$DIR/issue-88434-minimal-example.rs:3:25: 3:28]>`
+note: inside `f::<{closure@$DIR/issue-88434-minimal-example.rs:3:25: 3:28}>`
--> $DIR/issue-88434-minimal-example.rs:10:5
|
LL | panic!()
@@ -16,7 +16,7 @@ LL | const _CONST: &() = &f(&|_| {});
| ^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
-note: erroneous constant used
+note: erroneous constant encountered
--> $DIR/issue-88434-minimal-example.rs:3:21
|
LL | const _CONST: &() = &f(&|_| {});
diff --git a/tests/ui/borrowck/issue-88434-removal-index-should-be-less.stderr b/tests/ui/borrowck/issue-88434-removal-index-should-be-less.stderr
index 00023c459..9732b8cfa 100644
--- a/tests/ui/borrowck/issue-88434-removal-index-should-be-less.stderr
+++ b/tests/ui/borrowck/issue-88434-removal-index-should-be-less.stderr
@@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed
LL | panic!()
| ^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/issue-88434-removal-index-should-be-less.rs:10:5
|
-note: inside `f::<[closure@$DIR/issue-88434-removal-index-should-be-less.rs:3:31: 3:34]>`
+note: inside `f::<{closure@$DIR/issue-88434-removal-index-should-be-less.rs:3:31: 3:34}>`
--> $DIR/issue-88434-removal-index-should-be-less.rs:10:5
|
LL | panic!()
@@ -16,7 +16,7 @@ LL | const _CONST: &[u8] = &f(&[], |_| {});
| ^^^^^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
-note: erroneous constant used
+note: erroneous constant encountered
--> $DIR/issue-88434-removal-index-should-be-less.rs:3:23
|
LL | const _CONST: &[u8] = &f(&[], |_| {});
diff --git a/tests/ui/borrowck/issue-92157.rs b/tests/ui/borrowck/issue-92157.rs
index 6ee2320a6..3a6f8908b 100644
--- a/tests/ui/borrowck/issue-92157.rs
+++ b/tests/ui/borrowck/issue-92157.rs
@@ -9,7 +9,7 @@ extern {}
#[lang = "start"]
fn start<T>(_main: fn() -> T, _argc: isize, _argv: *const *const u8) -> isize {
- //~^ ERROR: incorrect number of parameters for the `start` lang item
+ //~^ ERROR lang item `start` function has wrong type [E0308]
40+2
}
diff --git a/tests/ui/borrowck/issue-92157.stderr b/tests/ui/borrowck/issue-92157.stderr
index a4010d73d..a46b12889 100644
--- a/tests/ui/borrowck/issue-92157.stderr
+++ b/tests/ui/borrowck/issue-92157.stderr
@@ -1,11 +1,12 @@
-error: incorrect number of parameters for the `start` lang item
+error[E0308]: lang item `start` function has wrong type
--> $DIR/issue-92157.rs:11:1
|
LL | fn start<T>(_main: fn() -> T, _argc: isize, _argv: *const *const u8) -> isize {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ incorrect number of function parameters
|
- = note: the `start` lang item should have four parameters, but found 3
- = note: the `start` lang item should have the signature `fn(fn() -> T, isize, *const *const u8, u8) -> isize`
+ = note: expected signature `fn(fn() -> T, isize, *const *const u8, u8) -> _`
+ found signature `fn(fn() -> T, isize, *const *const u8) -> _`
error: aborting due to previous error
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/borrowck/issue-95079-missing-move-in-nested-closure.stderr b/tests/ui/borrowck/issue-95079-missing-move-in-nested-closure.stderr
index 776c338de..d7762621c 100644
--- a/tests/ui/borrowck/issue-95079-missing-move-in-nested-closure.stderr
+++ b/tests/ui/borrowck/issue-95079-missing-move-in-nested-closure.stderr
@@ -24,7 +24,7 @@ error: lifetime may not live long enough
LL | move |()| s.chars().map(|c| format!("{}{}", c, s))
| --------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
| | |
- | | return type of closure `Map<Chars<'_>, [closure@$DIR/issue-95079-missing-move-in-nested-closure.rs:11:29: 11:32]>` contains a lifetime `'2`
+ | | return type of closure `Map<Chars<'_>, {closure@$DIR/issue-95079-missing-move-in-nested-closure.rs:11:29: 11:32}>` contains a lifetime `'2`
| lifetime `'1` represents this closure's body
|
= note: closure implements `Fn`, so references to captured variables can't escape the closure
diff --git a/tests/ui/borrowck/suggest-mut-iterator.fixed b/tests/ui/borrowck/suggest-mut-iterator.fixed
new file mode 100644
index 000000000..16512b8a3
--- /dev/null
+++ b/tests/ui/borrowck/suggest-mut-iterator.fixed
@@ -0,0 +1,30 @@
+// run-rustfix
+struct Test {
+ a: u32
+}
+
+impl Test {
+ pub fn add(&mut self, value: u32) {
+ self.a += value;
+ }
+
+ pub fn print_value(&self) {
+ println!("Value of a is: {}", self.a);
+ }
+}
+
+fn main() {
+ let mut tests = Vec::new();
+ for i in 0..=10 {
+ tests.push(Test {a: i});
+ }
+ for test in &mut tests {
+ test.add(2); //~ ERROR cannot borrow `*test` as mutable, as it is behind a `&` reference
+ }
+ for test in &mut tests {
+ test.add(2);
+ }
+ for test in &tests {
+ test.print_value();
+ }
+}
diff --git a/tests/ui/borrowck/suggest-mut-iterator.rs b/tests/ui/borrowck/suggest-mut-iterator.rs
new file mode 100644
index 000000000..276edeccb
--- /dev/null
+++ b/tests/ui/borrowck/suggest-mut-iterator.rs
@@ -0,0 +1,30 @@
+// run-rustfix
+struct Test {
+ a: u32
+}
+
+impl Test {
+ pub fn add(&mut self, value: u32) {
+ self.a += value;
+ }
+
+ pub fn print_value(&self) {
+ println!("Value of a is: {}", self.a);
+ }
+}
+
+fn main() {
+ let mut tests = Vec::new();
+ for i in 0..=10 {
+ tests.push(Test {a: i});
+ }
+ for test in &tests {
+ test.add(2); //~ ERROR cannot borrow `*test` as mutable, as it is behind a `&` reference
+ }
+ for test in &mut tests {
+ test.add(2);
+ }
+ for test in &tests {
+ test.print_value();
+ }
+}
diff --git a/tests/ui/borrowck/suggest-mut-iterator.stderr b/tests/ui/borrowck/suggest-mut-iterator.stderr
new file mode 100644
index 000000000..77f991a9a
--- /dev/null
+++ b/tests/ui/borrowck/suggest-mut-iterator.stderr
@@ -0,0 +1,16 @@
+error[E0596]: cannot borrow `*test` as mutable, as it is behind a `&` reference
+ --> $DIR/suggest-mut-iterator.rs:22:9
+ |
+LL | for test in &tests {
+ | ------ this iterator yields `&` references
+LL | test.add(2);
+ | ^^^^ `test` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ |
+help: use a mutable iterator instead
+ |
+LL | for test in &mut tests {
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.