summaryrefslogtreecommitdiffstats
path: root/tests/ui/suggestions/copied-and-cloned.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/suggestions/copied-and-cloned.rs')
-rw-r--r--tests/ui/suggestions/copied-and-cloned.rs34
1 files changed, 34 insertions, 0 deletions
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);
}