about summary refs log tree commit diff
path: root/tests/ui/ergonomic-clones
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2024-12-11 18:00:56 -0300
committerSantiago Pastorino <spastorino@gmail.com>2025-03-06 17:58:32 -0300
commitdcdfd551f05073ececfa437be002ce7804b31c91 (patch)
tree813604b622c9bb09c15e1724a6cebfd9d340b53d /tests/ui/ergonomic-clones
parent57cb498989ac29fbe9938ed2f4a31a3eab6850dc (diff)
downloadrust-dcdfd551f05073ececfa437be002ce7804b31c91.tar.gz
rust-dcdfd551f05073ececfa437be002ce7804b31c91.zip
Add UseCloned trait related code
Diffstat (limited to 'tests/ui/ergonomic-clones')
-rw-r--r--tests/ui/ergonomic-clones/closure.rs30
-rw-r--r--tests/ui/ergonomic-clones/dotuse.rs9
2 files changed, 33 insertions, 6 deletions
diff --git a/tests/ui/ergonomic-clones/closure.rs b/tests/ui/ergonomic-clones/closure.rs
index 340b9ece50e..19ef6f4e13d 100644
--- a/tests/ui/ergonomic-clones/closure.rs
+++ b/tests/ui/ergonomic-clones/closure.rs
@@ -3,6 +3,9 @@
 
 #![feature(ergonomic_clones)]
 
+use std::clone::UseCloned;
+use std::future::Future;
+
 fn ergonomic_clone_closure_no_captures() -> i32 {
     let cl = use || {
         1
@@ -10,7 +13,7 @@ fn ergonomic_clone_closure_no_captures() -> i32 {
     cl()
 }
 
-fn ergonomic_clone_closure_with_captures() -> String {
+fn ergonomic_clone_closure_move() -> String {
     let s = String::from("hi");
 
     let cl = use || {
@@ -19,14 +22,31 @@ fn ergonomic_clone_closure_with_captures() -> String {
     cl()
 }
 
-fn ergonomic_clone_async_closures() -> String {
+#[derive(Clone)]
+struct Foo;
+
+impl UseCloned for Foo {}
+
+fn ergonomic_clone_closure_use_cloned() -> Foo {
+    let f = Foo;
+
+    let f1 = use || {
+        f
+    };
+
+    let f2 = use || {
+        f
+    };
+
+    f
+}
+
+fn ergonomic_clone_async_closures() -> impl Future<Output = String> {
     let s = String::from("hi");
 
     async use {
         s
-    };
-
-    s
+    }
 }
 
 fn main() {}
diff --git a/tests/ui/ergonomic-clones/dotuse.rs b/tests/ui/ergonomic-clones/dotuse.rs
index 928c27296b1..4bab400fef2 100644
--- a/tests/ui/ergonomic-clones/dotuse.rs
+++ b/tests/ui/ergonomic-clones/dotuse.rs
@@ -2,11 +2,18 @@
 
 #![feature(ergonomic_clones)]
 
+use std::clone::UseCloned;
+
 fn basic_test(x: i32) -> i32 {
     x.use.use.abs()
 }
 
-fn do_not_move_test(x: String) -> String {
+#[derive(Clone)]
+struct Foo;
+
+impl UseCloned for Foo {}
+
+fn do_not_move_test(x: Foo) -> Foo {
     let s = x.use;
     x
 }