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