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