summaryrefslogtreecommitdiffstats
path: root/tests/ui/suggestions
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
commitd1b2d29528b7794b41e66fc2136e395a02f8529b (patch)
treea4a17504b260206dec3cf55b2dca82929a348ac2 /tests/ui/suggestions
parentReleasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.tar.xz
rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/suggestions')
-rw-r--r--tests/ui/suggestions/copied-and-cloned.fixed34
-rw-r--r--tests/ui/suggestions/copied-and-cloned.rs34
-rw-r--r--tests/ui/suggestions/copied-and-cloned.stderr64
-rw-r--r--tests/ui/suggestions/crate-or-module-typo.stderr16
-rw-r--r--tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs2
-rw-r--r--tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.stderr21
-rw-r--r--tests/ui/suggestions/issue-102972.stderr9
-rw-r--r--tests/ui/suggestions/issue-114701.rs15
-rw-r--r--tests/ui/suggestions/issue-114701.stderr15
-rw-r--r--tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.fixed17
-rw-r--r--tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.rs17
-rw-r--r--tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.stderr38
-rw-r--r--tests/ui/suggestions/issue-51055-missing-semicolon-between-call-and-tuple.stderr2
-rw-r--r--tests/ui/suggestions/late-bound-in-borrow-closure-sugg.stderr2
-rw-r--r--tests/ui/suggestions/missing-lifetime-in-assoc-const-type.default.stderr (renamed from tests/ui/suggestions/missing-lifetime-in-assoc-const-type.stderr)8
-rw-r--r--tests/ui/suggestions/missing-lifetime-in-assoc-const-type.generic_const_items.stderr47
-rw-r--r--tests/ui/suggestions/missing-lifetime-in-assoc-const-type.rs4
-rw-r--r--tests/ui/suggestions/missing-semicolon.fixed38
-rw-r--r--tests/ui/suggestions/missing-semicolon.rs38
-rw-r--r--tests/ui/suggestions/missing-semicolon.stderr75
-rw-r--r--tests/ui/suggestions/option-content-move.stderr4
-rw-r--r--tests/ui/suggestions/remove-question-symbol-with-paren.rs9
-rw-r--r--tests/ui/suggestions/remove-question-symbol-with-paren.stderr25
-rw-r--r--tests/ui/suggestions/suggest-mut-method-for-loop-closure.rs19
-rw-r--r--tests/ui/suggestions/suggest-mut-method-for-loop-closure.stderr15
25 files changed, 536 insertions, 32 deletions
diff --git a/tests/ui/suggestions/copied-and-cloned.fixed b/tests/ui/suggestions/copied-and-cloned.fixed
index f801403fe..4cecf9e26 100644
--- a/tests/ui/suggestions/copied-and-cloned.fixed
+++ b/tests/ui/suggestions/copied-and-cloned.fixed
@@ -2,6 +2,16 @@
fn expect<T>(_: T) {}
+struct Issue114925 {
+ x: Option<String>,
+}
+
+fn issue_114925(lol: &mut Issue114925, x: Option<&String>) {
+ lol.x = x.clone().cloned();
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::cloned` to clone the value inside the `Option`
+}
+
fn main() {
let x = Some(&());
expect::<Option<()>>(x.copied());
@@ -20,4 +30,28 @@ fn main() {
expect::<Result<String, ()>>(x.cloned());
//~^ ERROR mismatched types
//~| HELP use `Result::cloned` to clone the value inside the `Result`
+
+ let s = String::new();
+ let x = Some(s.clone());
+ let y = Some(&s);
+ println!("{}", x == y.cloned());
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::cloned` to clone the value inside the `Option`
+ //FIXME(#114050) ~| HELP use `Option::as_ref` to convert `Option<String>` to `Option<&String>`
+
+ let mut s = ();
+ let x = Some(s);
+ let y = Some(&mut s);
+ println!("{}", x == y.copied());
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::copied` to copy the value inside the `Option`
+
+ let mut s = String::new();
+ let x = Some(s.clone());
+ let y = Some(&mut s);
+ println!("{}", x == y.cloned());
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::cloned` to clone the value inside the `Option`
+
+ issue_114925(&mut Issue114925 { x: None }, None);
}
diff --git a/tests/ui/suggestions/copied-and-cloned.rs b/tests/ui/suggestions/copied-and-cloned.rs
index 640450b76..a79928c50 100644
--- a/tests/ui/suggestions/copied-and-cloned.rs
+++ b/tests/ui/suggestions/copied-and-cloned.rs
@@ -2,6 +2,16 @@
fn expect<T>(_: T) {}
+struct Issue114925 {
+ x: Option<String>,
+}
+
+fn issue_114925(lol: &mut Issue114925, x: Option<&String>) {
+ lol.x = x.clone();
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::cloned` to clone the value inside the `Option`
+}
+
fn main() {
let x = Some(&());
expect::<Option<()>>(x);
@@ -20,4 +30,28 @@ fn main() {
expect::<Result<String, ()>>(x);
//~^ ERROR mismatched types
//~| HELP use `Result::cloned` to clone the value inside the `Result`
+
+ let s = String::new();
+ let x = Some(s.clone());
+ let y = Some(&s);
+ println!("{}", x == y);
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::cloned` to clone the value inside the `Option`
+ //FIXME(#114050) ~| HELP use `Option::as_ref` to convert `Option<String>` to `Option<&String>`
+
+ let mut s = ();
+ let x = Some(s);
+ let y = Some(&mut s);
+ println!("{}", x == y);
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::copied` to copy the value inside the `Option`
+
+ let mut s = String::new();
+ let x = Some(s.clone());
+ let y = Some(&mut s);
+ println!("{}", x == y);
+ //~^ ERROR mismatched types
+ //~| HELP use `Option::cloned` to clone the value inside the `Option`
+
+ issue_114925(&mut Issue114925 { x: None }, None);
}
diff --git a/tests/ui/suggestions/copied-and-cloned.stderr b/tests/ui/suggestions/copied-and-cloned.stderr
index 067808141..87b0624d4 100644
--- a/tests/ui/suggestions/copied-and-cloned.stderr
+++ b/tests/ui/suggestions/copied-and-cloned.stderr
@@ -1,5 +1,20 @@
error[E0308]: mismatched types
- --> $DIR/copied-and-cloned.rs:7:26
+ --> $DIR/copied-and-cloned.rs:10:13
+ |
+LL | lol.x = x.clone();
+ | ----- ^^^^^^^^^ expected `Option<String>`, found `Option<&String>`
+ | |
+ | expected due to the type of this binding
+ |
+ = note: expected enum `Option<String>`
+ found enum `Option<&String>`
+help: use `Option::cloned` to clone the value inside the `Option`
+ |
+LL | lol.x = x.clone().cloned();
+ | +++++++++
+
+error[E0308]: mismatched types
+ --> $DIR/copied-and-cloned.rs:17:26
|
LL | expect::<Option<()>>(x);
| -------------------- ^ expected `Option<()>`, found `Option<&()>`
@@ -19,7 +34,7 @@ LL | expect::<Option<()>>(x.copied());
| +++++++++
error[E0308]: mismatched types
- --> $DIR/copied-and-cloned.rs:11:30
+ --> $DIR/copied-and-cloned.rs:21:30
|
LL | expect::<Result<(), ()>>(x);
| ------------------------ ^ expected `Result<(), ()>`, found `Result<&(), _>`
@@ -39,7 +54,7 @@ LL | expect::<Result<(), ()>>(x.copied());
| +++++++++
error[E0308]: mismatched types
- --> $DIR/copied-and-cloned.rs:16:30
+ --> $DIR/copied-and-cloned.rs:26:30
|
LL | expect::<Option<String>>(x);
| ------------------------ ^ expected `Option<String>`, found `Option<&String>`
@@ -59,7 +74,7 @@ LL | expect::<Option<String>>(x.cloned());
| +++++++++
error[E0308]: mismatched types
- --> $DIR/copied-and-cloned.rs:20:34
+ --> $DIR/copied-and-cloned.rs:30:34
|
LL | expect::<Result<String, ()>>(x);
| ---------------------------- ^ expected `Result<String, ()>`, found `Result<&String, _>`
@@ -78,6 +93,45 @@ help: use `Result::cloned` to clone the value inside the `Result`
LL | expect::<Result<String, ()>>(x.cloned());
| +++++++++
-error: aborting due to 4 previous errors
+error[E0308]: mismatched types
+ --> $DIR/copied-and-cloned.rs:37:25
+ |
+LL | println!("{}", x == y);
+ | ^ expected `Option<String>`, found `Option<&String>`
+ |
+ = note: expected enum `Option<String>`
+ found enum `Option<&String>`
+help: use `Option::cloned` to clone the value inside the `Option`
+ |
+LL | println!("{}", x == y.cloned());
+ | +++++++++
+
+error[E0308]: mismatched types
+ --> $DIR/copied-and-cloned.rs:45:25
+ |
+LL | println!("{}", x == y);
+ | ^ expected `Option<()>`, found `Option<&mut ()>`
+ |
+ = note: expected enum `Option<()>`
+ found enum `Option<&mut ()>`
+help: use `Option::copied` to copy the value inside the `Option`
+ |
+LL | println!("{}", x == y.copied());
+ | +++++++++
+
+error[E0308]: mismatched types
+ --> $DIR/copied-and-cloned.rs:52:25
+ |
+LL | println!("{}", x == y);
+ | ^ expected `Option<String>`, found `Option<&mut String>`
+ |
+ = note: expected enum `Option<String>`
+ found enum `Option<&mut String>`
+help: use `Option::cloned` to clone the value inside the `Option`
+ |
+LL | println!("{}", x == y.cloned());
+ | +++++++++
+
+error: aborting due to 8 previous errors
For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/suggestions/crate-or-module-typo.stderr b/tests/ui/suggestions/crate-or-module-typo.stderr
index 5e7a7685a..9ece31e76 100644
--- a/tests/ui/suggestions/crate-or-module-typo.stderr
+++ b/tests/ui/suggestions/crate-or-module-typo.stderr
@@ -30,17 +30,23 @@ help: there is a crate or module with a similar name
|
LL | bar: std::cell::Cell<bool>
| ~~~
+help: consider importing one of these items
+ |
+LL + use core::cell;
+ |
+LL + use std::cell;
+ |
+help: if you import `cell`, refer to it directly
+ |
+LL - bar: st::cell::Cell<bool>
+LL + bar: cell::Cell<bool>
+ |
error[E0433]: failed to resolve: use of undeclared crate or module `bar`
--> $DIR/crate-or-module-typo.rs:6:20
|
LL | pub fn bar() { bar::baz(); }
| ^^^ use of undeclared crate or module `bar`
- |
-help: consider importing this module
- |
-LL + use crate::bar;
- |
error: aborting due to 4 previous errors
diff --git a/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs b/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs
index 711cbbd38..255cab060 100644
--- a/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs
+++ b/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs
@@ -18,7 +18,7 @@ mod bav {
impl Bar for i32 {}
fn use_it<'a>(val: Box<dyn ObjectTrait<Assoc = i32>>) -> impl OtherTrait<'a> {
- val.use_self() //~ ERROR cannot return reference to function parameter
+ val.use_self() //~ ERROR cannot return value referencing function parameter
}
}
diff --git a/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.stderr b/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.stderr
index 2dc300ac7..a7e03f491 100644
--- a/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.stderr
+++ b/tests/ui/suggestions/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.stderr
@@ -1,20 +1,29 @@
-error[E0515]: cannot return reference to function parameter `val`
+error[E0515]: cannot return value referencing function parameter `val`
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs:21:9
|
LL | val.use_self()
- | ^^^^^^^^^^^^^^ returns a reference to data owned by the current function
+ | ---^^^^^^^^^^^
+ | |
+ | returns a value referencing data owned by the current function
+ | `val` is borrowed here
-error[E0515]: cannot return reference to function parameter `val`
+error[E0515]: cannot return value referencing function parameter `val`
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs:43:9
|
LL | val.use_self()
- | ^^^^^^^^^^^^^^ returns a reference to data owned by the current function
+ | ---^^^^^^^^^^^
+ | |
+ | returns a value referencing data owned by the current function
+ | `val` is borrowed here
-error[E0515]: cannot return reference to function parameter `val`
+error[E0515]: cannot return value referencing function parameter `val`
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound-needing-more-suggestions.rs:109:9
|
LL | val.use_self()
- | ^^^^^^^^^^^^^^ returns a reference to data owned by the current function
+ | ---^^^^^^^^^^^
+ | |
+ | returns a value referencing data owned by the current function
+ | `val` is borrowed here
error: aborting due to 3 previous errors
diff --git a/tests/ui/suggestions/issue-102972.stderr b/tests/ui/suggestions/issue-102972.stderr
index 03f9dbb6c..3303d6bbc 100644
--- a/tests/ui/suggestions/issue-102972.stderr
+++ b/tests/ui/suggestions/issue-102972.stderr
@@ -7,10 +7,7 @@ LL | for _c in chars.by_ref() {
| first mutable borrow occurs here
| first borrow later used here
LL | chars.next();
- | ^^^^^^^^^^^^ second mutable borrow occurs here
- |
- = note: a for loop advances the iterator for you, the result is stored in `_c`.
- = help: if you want to call `next` on a iterator within the loop, consider using `while let`.
+ | ^^^^^ second mutable borrow occurs here
error[E0382]: borrow of moved value: `iter`
--> $DIR/issue-102972.rs:12:9
@@ -20,10 +17,8 @@ LL | let mut iter = v.iter();
LL | for _i in iter {
| ---- `iter` moved due to this implicit call to `.into_iter()`
LL | iter.next();
- | ^^^^^^^^^^^ value borrowed here after move
+ | ^^^^ value borrowed here after move
|
- = note: a for loop advances the iterator for you, the result is stored in `_i`.
- = help: if you want to call `next` on a iterator within the loop, consider using `while let`.
note: `into_iter` takes ownership of the receiver `self`, which moves `iter`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
diff --git a/tests/ui/suggestions/issue-114701.rs b/tests/ui/suggestions/issue-114701.rs
new file mode 100644
index 000000000..81d7803ec
--- /dev/null
+++ b/tests/ui/suggestions/issue-114701.rs
@@ -0,0 +1,15 @@
+enum Enum<T> { SVariant { v: T }, UVariant }
+
+macro_rules! is_variant {
+ (TSVariant, ) => (!);
+ (SVariant, ) => (!);
+ (UVariant, $expr:expr) => (is_variant!(@check UVariant, {}, $expr));
+ (@check $variant:ident, $matcher:tt, $expr:expr) => (
+ assert!(if let Enum::$variant::<()> $matcher = $expr () { true } else { false },
+ );
+ );
+}
+
+fn main() {
+ is_variant!(UVariant, Enum::<()>::UVariant); //~ ERROR expected function
+}
diff --git a/tests/ui/suggestions/issue-114701.stderr b/tests/ui/suggestions/issue-114701.stderr
new file mode 100644
index 000000000..67462a09c
--- /dev/null
+++ b/tests/ui/suggestions/issue-114701.stderr
@@ -0,0 +1,15 @@
+error[E0618]: expected function, found `Enum<()>`
+ --> $DIR/issue-114701.rs:14:27
+ |
+LL | enum Enum<T> { SVariant { v: T }, UVariant }
+ | -------- `Enum::UVariant` defined here
+...
+LL | assert!(if let Enum::$variant::<()> $matcher = $expr () { true } else { false },
+ | -------- call expression requires function
+...
+LL | is_variant!(UVariant, Enum::<()>::UVariant);
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.fixed b/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.fixed
new file mode 100644
index 000000000..57387936a
--- /dev/null
+++ b/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.fixed
@@ -0,0 +1,17 @@
+//run-rustfix
+#![allow(dead_code)]
+
+trait Trait {}
+
+fn assert_send(ptr: *mut dyn Trait) -> *mut (dyn Trait + Send) {
+ //~^ ERROR incorrect parentheses around trait bounds
+ ptr as _
+}
+
+fn foo2(_: &(dyn Trait + Send)) {}
+//~^ ERROR incorrect parentheses around trait bounds
+
+fn foo3(_: &(dyn Trait + Send)) {}
+//~^ ERROR incorrect parentheses around trait bounds
+
+fn main() {}
diff --git a/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.rs b/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.rs
new file mode 100644
index 000000000..8a1939bcf
--- /dev/null
+++ b/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.rs
@@ -0,0 +1,17 @@
+//run-rustfix
+#![allow(dead_code)]
+
+trait Trait {}
+
+fn assert_send(ptr: *mut dyn Trait) -> *mut dyn (Trait + Send) {
+ //~^ ERROR incorrect parentheses around trait bounds
+ ptr as _
+}
+
+fn foo2(_: &dyn (Trait + Send)) {}
+//~^ ERROR incorrect parentheses around trait bounds
+
+fn foo3(_: &dyn(Trait + Send)) {}
+//~^ ERROR incorrect parentheses around trait bounds
+
+fn main() {}
diff --git a/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.stderr b/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.stderr
new file mode 100644
index 000000000..2d1abe91a
--- /dev/null
+++ b/tests/ui/suggestions/issue-114797-bad-parentheses-dyn-trait.stderr
@@ -0,0 +1,38 @@
+error: incorrect parentheses around trait bounds
+ --> $DIR/issue-114797-bad-parentheses-dyn-trait.rs:6:49
+ |
+LL | fn assert_send(ptr: *mut dyn Trait) -> *mut dyn (Trait + Send) {
+ | ^ ^
+ |
+help: fix the parentheses
+ |
+LL - fn assert_send(ptr: *mut dyn Trait) -> *mut dyn (Trait + Send) {
+LL + fn assert_send(ptr: *mut dyn Trait) -> *mut (dyn Trait + Send) {
+ |
+
+error: incorrect parentheses around trait bounds
+ --> $DIR/issue-114797-bad-parentheses-dyn-trait.rs:11:17
+ |
+LL | fn foo2(_: &dyn (Trait + Send)) {}
+ | ^ ^
+ |
+help: fix the parentheses
+ |
+LL - fn foo2(_: &dyn (Trait + Send)) {}
+LL + fn foo2(_: &(dyn Trait + Send)) {}
+ |
+
+error: incorrect parentheses around trait bounds
+ --> $DIR/issue-114797-bad-parentheses-dyn-trait.rs:14:16
+ |
+LL | fn foo3(_: &dyn(Trait + Send)) {}
+ | ^ ^
+ |
+help: fix the parentheses
+ |
+LL - fn foo3(_: &dyn(Trait + Send)) {}
+LL + fn foo3(_: &(dyn Trait + Send)) {}
+ |
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/suggestions/issue-51055-missing-semicolon-between-call-and-tuple.stderr b/tests/ui/suggestions/issue-51055-missing-semicolon-between-call-and-tuple.stderr
index 438075083..bb8b9b370 100644
--- a/tests/ui/suggestions/issue-51055-missing-semicolon-between-call-and-tuple.stderr
+++ b/tests/ui/suggestions/issue-51055-missing-semicolon-between-call-and-tuple.stderr
@@ -5,7 +5,7 @@ LL | fn vindictive() -> bool { true }
| ----------------------- `vindictive` defined here returns `bool`
...
LL | vindictive()
- | -^^^^^^^^^^^- help: consider using a semicolon here: `;`
+ | -^^^^^^^^^^^- help: consider using a semicolon here to finish the statement: `;`
| _____|
| |
LL | | (1, 2)
diff --git a/tests/ui/suggestions/late-bound-in-borrow-closure-sugg.stderr b/tests/ui/suggestions/late-bound-in-borrow-closure-sugg.stderr
index 6820af1fd..a03d4e8ce 100644
--- a/tests/ui/suggestions/late-bound-in-borrow-closure-sugg.stderr
+++ b/tests/ui/suggestions/late-bound-in-borrow-closure-sugg.stderr
@@ -16,7 +16,7 @@ note: required by a bound in `Trader::<'a>::set_closure`
|
LL | pub fn set_closure(&mut self, function: impl Fn(&mut Trader) + 'a) {
| ^^^^^^^^^^^^^^^ required by this bound in `Trader::<'a>::set_closure`
-help: consider borrowing the argument
+help: consider adjusting the signature so it borrows its argument
|
LL | let closure = |trader : &mut Trader| {
| ++++
diff --git a/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.stderr b/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.default.stderr
index 233f1bc5a..24e2e0a0f 100644
--- a/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.stderr
+++ b/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.default.stderr
@@ -1,5 +1,5 @@
error[E0106]: missing lifetime specifier
- --> $DIR/missing-lifetime-in-assoc-const-type.rs:2:14
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:6:14
|
LL | const A: &str = "";
| ^ expected named lifetime parameter
@@ -11,7 +11,7 @@ LL ~ const A: &'a str = "";
|
error[E0106]: missing lifetime specifier
- --> $DIR/missing-lifetime-in-assoc-const-type.rs:3:14
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:7:14
|
LL | const B: S = S { s: &() };
| ^ expected named lifetime parameter
@@ -24,7 +24,7 @@ LL ~ const B: S<'a> = S { s: &() };
|
error[E0106]: missing lifetime specifier
- --> $DIR/missing-lifetime-in-assoc-const-type.rs:4:15
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:8:15
|
LL | const C: &'_ str = "";
| ^^ expected named lifetime parameter
@@ -38,7 +38,7 @@ LL ~ const C: &'a str = "";
|
error[E0106]: missing lifetime specifiers
- --> $DIR/missing-lifetime-in-assoc-const-type.rs:5:14
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:9:14
|
LL | const D: T = T { a: &(), b: &() };
| ^ expected 2 lifetime parameters
diff --git a/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.generic_const_items.stderr b/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.generic_const_items.stderr
new file mode 100644
index 000000000..a97ffe7da
--- /dev/null
+++ b/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.generic_const_items.stderr
@@ -0,0 +1,47 @@
+error[E0106]: missing lifetime specifier
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:6:14
+ |
+LL | const A: &str = "";
+ | ^ expected named lifetime parameter
+ |
+help: consider introducing a named lifetime parameter
+ |
+LL | const A<'a>: &'a str = "";
+ | ++++ ++
+
+error[E0106]: missing lifetime specifier
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:7:14
+ |
+LL | const B: S = S { s: &() };
+ | ^ expected named lifetime parameter
+ |
+help: consider introducing a named lifetime parameter
+ |
+LL | const B<'a>: S<'a> = S { s: &() };
+ | ++++ ++++
+
+error[E0106]: missing lifetime specifier
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:8:15
+ |
+LL | const C: &'_ str = "";
+ | ^^ expected named lifetime parameter
+ |
+help: consider introducing a named lifetime parameter
+ |
+LL | const C<'a>: &'a str = "";
+ | ++++ ~~
+
+error[E0106]: missing lifetime specifiers
+ --> $DIR/missing-lifetime-in-assoc-const-type.rs:9:14
+ |
+LL | const D: T = T { a: &(), b: &() };
+ | ^ expected 2 lifetime parameters
+ |
+help: consider introducing a named lifetime parameter
+ |
+LL | const D<'a>: T<'a, 'a> = T { a: &(), b: &() };
+ | ++++ ++++++++
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0106`.
diff --git a/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.rs b/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.rs
index 38332627f..2a8b4c3c0 100644
--- a/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.rs
+++ b/tests/ui/suggestions/missing-lifetime-in-assoc-const-type.rs
@@ -1,3 +1,7 @@
+// revisions: default generic_const_items
+
+#![cfg_attr(generic_const_items, feature(generic_const_items), allow(incomplete_features))]
+
trait ZstAssert: Sized {
const A: &str = ""; //~ ERROR missing lifetime specifier
const B: S = S { s: &() }; //~ ERROR missing lifetime specifier
diff --git a/tests/ui/suggestions/missing-semicolon.fixed b/tests/ui/suggestions/missing-semicolon.fixed
new file mode 100644
index 000000000..df355f0b0
--- /dev/null
+++ b/tests/ui/suggestions/missing-semicolon.fixed
@@ -0,0 +1,38 @@
+// run-rustfix
+#![allow(dead_code, unused_variables, path_statements)]
+fn a() {
+ let x = 5;
+ let y = x; //~ ERROR expected function
+ (); //~ ERROR expected `;`, found `}`
+}
+
+fn b() {
+ let x = 5;
+ let y = x; //~ ERROR expected function
+ ();
+}
+fn c() {
+ let x = 5;
+ x; //~ ERROR expected function
+ ()
+}
+fn d() { // ok
+ let x = || ();
+ x
+ ()
+}
+fn e() { // ok
+ let x = || ();
+ x
+ ();
+}
+fn f()
+ {
+ let y = 5; //~ ERROR expected function
+ (); //~ ERROR expected `;`, found `}`
+}
+fn g() {
+ 5; //~ ERROR expected function
+ ();
+}
+fn main() {}
diff --git a/tests/ui/suggestions/missing-semicolon.rs b/tests/ui/suggestions/missing-semicolon.rs
new file mode 100644
index 000000000..12ef3d33e
--- /dev/null
+++ b/tests/ui/suggestions/missing-semicolon.rs
@@ -0,0 +1,38 @@
+// run-rustfix
+#![allow(dead_code, unused_variables, path_statements)]
+fn a() {
+ let x = 5;
+ let y = x //~ ERROR expected function
+ () //~ ERROR expected `;`, found `}`
+}
+
+fn b() {
+ let x = 5;
+ let y = x //~ ERROR expected function
+ ();
+}
+fn c() {
+ let x = 5;
+ x //~ ERROR expected function
+ ()
+}
+fn d() { // ok
+ let x = || ();
+ x
+ ()
+}
+fn e() { // ok
+ let x = || ();
+ x
+ ();
+}
+fn f()
+ {
+ let y = 5 //~ ERROR expected function
+ () //~ ERROR expected `;`, found `}`
+}
+fn g() {
+ 5 //~ ERROR expected function
+ ();
+}
+fn main() {}
diff --git a/tests/ui/suggestions/missing-semicolon.stderr b/tests/ui/suggestions/missing-semicolon.stderr
new file mode 100644
index 000000000..54a64f664
--- /dev/null
+++ b/tests/ui/suggestions/missing-semicolon.stderr
@@ -0,0 +1,75 @@
+error: expected `;`, found `}`
+ --> $DIR/missing-semicolon.rs:6:7
+ |
+LL | ()
+ | ^ help: add `;` here
+LL | }
+ | - unexpected token
+
+error: expected `;`, found `}`
+ --> $DIR/missing-semicolon.rs:32:7
+ |
+LL | ()
+ | ^ help: add `;` here
+LL | }
+ | - unexpected token
+
+error[E0618]: expected function, found `{integer}`
+ --> $DIR/missing-semicolon.rs:5:13
+ |
+LL | let x = 5;
+ | - `x` has type `{integer}`
+LL | let y = x
+ | ^- help: consider using a semicolon here to finish the statement: `;`
+ | _____________|
+ | |
+LL | | ()
+ | |______- call expression requires function
+
+error[E0618]: expected function, found `{integer}`
+ --> $DIR/missing-semicolon.rs:11:13
+ |
+LL | let x = 5;
+ | - `x` has type `{integer}`
+LL | let y = x
+ | ^- help: consider using a semicolon here to finish the statement: `;`
+ | _____________|
+ | |
+LL | | ();
+ | |______- call expression requires function
+
+error[E0618]: expected function, found `{integer}`
+ --> $DIR/missing-semicolon.rs:16:5
+ |
+LL | let x = 5;
+ | - `x` has type `{integer}`
+LL | x
+ | ^- help: consider using a semicolon here to finish the statement: `;`
+ | _____|
+ | |
+LL | | ()
+ | |______- call expression requires function
+
+error[E0618]: expected function, found `{integer}`
+ --> $DIR/missing-semicolon.rs:31:13
+ |
+LL | let y = 5
+ | ^- help: consider using a semicolon here to finish the statement: `;`
+ | _____________|
+ | |
+LL | | ()
+ | |______- call expression requires function
+
+error[E0618]: expected function, found `{integer}`
+ --> $DIR/missing-semicolon.rs:35:5
+ |
+LL | 5
+ | ^- help: consider using a semicolon here to finish the statement: `;`
+ | _____|
+ | |
+LL | | ();
+ | |______- call expression requires function
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0618`.
diff --git a/tests/ui/suggestions/option-content-move.stderr b/tests/ui/suggestions/option-content-move.stderr
index 474a72093..5060606d8 100644
--- a/tests/ui/suggestions/option-content-move.stderr
+++ b/tests/ui/suggestions/option-content-move.stderr
@@ -12,7 +12,7 @@ note: `Option::<T>::unwrap` takes ownership of the receiver `self`, which moves
help: you can `clone` the value and consume it, but this might not be your desired behavior
|
LL | if selection.1.clone().unwrap().contains(selection.0) {
- | ++++++++
+ | ++++++++
error[E0507]: cannot move out of `selection.1` which is behind a shared reference
--> $DIR/option-content-move.rs:27:20
@@ -28,7 +28,7 @@ note: `Result::<T, E>::unwrap` takes ownership of the receiver `self`, which mov
help: you can `clone` the value and consume it, but this might not be your desired behavior
|
LL | if selection.1.clone().unwrap().contains(selection.0) {
- | ++++++++
+ | ++++++++
error: aborting due to 2 previous errors
diff --git a/tests/ui/suggestions/remove-question-symbol-with-paren.rs b/tests/ui/suggestions/remove-question-symbol-with-paren.rs
new file mode 100644
index 000000000..c522793db
--- /dev/null
+++ b/tests/ui/suggestions/remove-question-symbol-with-paren.rs
@@ -0,0 +1,9 @@
+// https://github.com/rust-lang/rust/issues/114392
+
+fn foo() -> Option<()> {
+ let x = Some(());
+ (x?)
+ //~^ ERROR `?` operator has incompatible types
+}
+
+fn main() {}
diff --git a/tests/ui/suggestions/remove-question-symbol-with-paren.stderr b/tests/ui/suggestions/remove-question-symbol-with-paren.stderr
new file mode 100644
index 000000000..40b9cf2dc
--- /dev/null
+++ b/tests/ui/suggestions/remove-question-symbol-with-paren.stderr
@@ -0,0 +1,25 @@
+error[E0308]: `?` operator has incompatible types
+ --> $DIR/remove-question-symbol-with-paren.rs:5:6
+ |
+LL | fn foo() -> Option<()> {
+ | ---------- expected `Option<()>` because of return type
+LL | let x = Some(());
+LL | (x?)
+ | ^^ expected `Option<()>`, found `()`
+ |
+ = note: `?` operator cannot convert from `()` to `Option<()>`
+ = note: expected enum `Option<()>`
+ found unit type `()`
+help: try removing this `?`
+ |
+LL - (x?)
+LL + (x)
+ |
+help: try wrapping the expression in `Some`
+ |
+LL | (Some(x?))
+ | +++++ +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/suggestions/suggest-mut-method-for-loop-closure.rs b/tests/ui/suggestions/suggest-mut-method-for-loop-closure.rs
new file mode 100644
index 000000000..e4721ba01
--- /dev/null
+++ b/tests/ui/suggestions/suggest-mut-method-for-loop-closure.rs
@@ -0,0 +1,19 @@
+use std::collections::HashMap;
+struct X(usize);
+struct Y {
+ v: u32,
+}
+
+fn main() {
+ let _ = || {
+ let mut buzz = HashMap::new();
+ buzz.insert("a", Y { v: 0 });
+
+ for mut t in buzz.values() {
+ //~^ HELP
+ //~| SUGGESTION values_mut()
+ t.v += 1;
+ //~^ ERROR cannot assign
+ }
+ };
+}
diff --git a/tests/ui/suggestions/suggest-mut-method-for-loop-closure.stderr b/tests/ui/suggestions/suggest-mut-method-for-loop-closure.stderr
new file mode 100644
index 000000000..8a2df8d7c
--- /dev/null
+++ b/tests/ui/suggestions/suggest-mut-method-for-loop-closure.stderr
@@ -0,0 +1,15 @@
+error[E0594]: cannot assign to `t.v`, which is behind a `&` reference
+ --> $DIR/suggest-mut-method-for-loop-closure.rs:15:13
+ |
+LL | for mut t in buzz.values() {
+ | -------------
+ | | |
+ | | help: use mutable method: `values_mut()`
+ | this iterator yields `&` references
+...
+LL | t.v += 1;
+ | ^^^^^^^^ `t` is a `&` reference, so the data it refers to cannot be written
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0594`.