File tree 1 file changed +56
-0
lines changed
tests/codegen/ergonomic-clones
1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ // ignore-tidy
2
+ //@ compile-flags: -C no-prepopulate-passes -Copt-level=0 -Zmir-opt-level=0
3
+
4
+ #![ crate_type = "lib" ]
5
+
6
+ #![ feature( ergonomic_clones) ]
7
+ #![ allow( incomplete_features) ]
8
+
9
+ use std:: clone:: UseCloned ;
10
+
11
+ pub fn ergonomic_clone_closure_move ( ) -> String {
12
+ let s = String :: from ( "hi" ) ;
13
+
14
+ // CHECK-NOT: ; call core::clone::impls::<impl core::clone::Clone for String>::clone
15
+ let cl = use || s;
16
+ cl ( )
17
+ }
18
+
19
+ #[ derive( Clone ) ]
20
+ struct Foo ;
21
+
22
+ impl UseCloned for Foo { }
23
+
24
+ pub fn ergonomic_clone_closure_use_cloned ( ) -> Foo {
25
+ let f = Foo ;
26
+
27
+ // CHECK: ; call <closure::Foo as core::clone::Clone>::clone
28
+ let f1 = use || f;
29
+
30
+ // CHECK: ; call <closure::Foo as core::clone::Clone>::clone
31
+ let f2 = use || f;
32
+
33
+ f
34
+ }
35
+
36
+ pub fn ergonomic_clone_closure_copy ( ) -> i32 {
37
+ let i = 1 ;
38
+
39
+ // CHECK-NOT: ; call core::clone::impls::<impl core::clone::Clone for i32>::clone
40
+ let i1 = use || i;
41
+
42
+ // CHECK-NOT: ; call core::clone::impls::<impl core::clone::Clone for i32>::clone
43
+ let i2 = use || i;
44
+
45
+ i
46
+ }
47
+
48
+ pub fn ergonomic_clone_closure_use_cloned_generics < T : UseCloned > ( f : T ) -> T {
49
+ // CHECK-NOT: ; call core::clone::impls::<impl core::clone::Clone for i32>::clone
50
+ let f1 = use || f;
51
+
52
+ // CHECK-NOT: ; call core::clone::impls::<impl core::clone::Clone for i32>::clone
53
+ let f2 = use || f;
54
+
55
+ f
56
+ }
You can’t perform that action at this time.
0 commit comments