File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed
tests/mir-opt/ergonomic-clones Expand file tree Collapse file tree 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