@@ -11,3 +11,119 @@ fn clone_thing(nc: &NotClone) -> NotClone {
1111 //~| NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
1212 //~| NOTE expected `NotClone`, found `&NotClone`
1313}
14+
15+ fn clone_thing2 ( nc : & NotClone ) -> NotClone {
16+ let nc: NotClone = nc. clone ( ) ;
17+ //~^ ERROR mismatched type
18+ //~| NOTE expected due to this
19+ //~| NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
20+ //~| NOTE expected `NotClone`, found `&NotClone`
21+ nc
22+ }
23+
24+ fn clone_thing3 ( nc : & NotClone ) -> NotClone {
25+ //~^ NOTE expected `NotClone` because of return type
26+ let nc = nc. clone ( ) ;
27+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
28+ nc
29+ //~^ ERROR mismatched type
30+ //~| NOTE expected `NotClone`, found `&NotClone`
31+ }
32+
33+ fn clone_thing4 ( nc : & NotClone ) -> NotClone {
34+ //~^ NOTE expected `NotClone` because of return type
35+ let nc = nc. clone ( ) ;
36+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
37+ let nc2 = nc;
38+ nc2
39+ //~^ ERROR mismatched type
40+ //~| NOTE expected `NotClone`, found `&NotClone`
41+ }
42+
43+ impl NotClone {
44+ fn other_fn ( & self ) { }
45+ fn get_ref_notclone ( & self ) -> & Self {
46+ self
47+ }
48+ }
49+
50+ fn clone_thing5 ( nc : & NotClone ) -> NotClone {
51+ //~^ NOTE expected `NotClone` because of return type
52+ let nc = nc. clone ( ) ;
53+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
54+ let nc2 = nc;
55+ nc2. other_fn ( ) ;
56+ let nc3 = nc2;
57+ nc3
58+ //~^ ERROR mismatched type
59+ //~| NOTE expected `NotClone`, found `&NotClone`
60+ }
61+
62+ fn clone_thing6 ( nc : & NotClone ) -> NotClone {
63+ //~^ NOTE expected `NotClone` because of return type
64+ let ( ret, _) = ( nc. clone ( ) , 1 ) ;
65+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
66+ let _ = nc. clone ( ) ;
67+ ret
68+ //~^ ERROR mismatched type
69+ //~| NOTE expected `NotClone`, found `&NotClone`
70+ }
71+
72+ fn clone_thing7 ( nc : Vec < & NotClone > ) -> NotClone {
73+ //~^ NOTE expected `NotClone` because of return type
74+ let ret = nc[ 0 ] . clone ( ) ;
75+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
76+ ret
77+ //~^ ERROR mismatched type
78+ //~| NOTE expected `NotClone`, found `&NotClone`
79+ }
80+
81+ fn clone_thing8 ( nc : & NotClone ) -> NotClone {
82+ //~^ NOTE expected `NotClone` because of return type
83+ let ret = {
84+ let a = nc. clone ( ) ;
85+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
86+ a
87+ } ;
88+ ret
89+ //~^ ERROR mismatched type
90+ //~| NOTE expected `NotClone`, found `&NotClone`
91+ }
92+
93+ fn clone_thing9 ( nc : & NotClone ) -> NotClone {
94+ //~^ NOTE expected `NotClone` because of return type
95+ let cl = || nc. clone ( ) ;
96+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
97+ let ret = cl ( ) ;
98+ ret
99+ //~^ ERROR mismatched type
100+ //~| NOTE expected `NotClone`, found `&NotClone`
101+ }
102+
103+ fn clone_thing10 ( nc : & NotClone ) -> ( NotClone , NotClone ) {
104+ let ( a, b) = {
105+ let a = nc. clone ( ) ;
106+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
107+ ( a, nc. clone ( ) )
108+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
109+ } ;
110+ ( a, b)
111+ //~^ ERROR mismatched type
112+ //~| ERROR mismatched type
113+ //~| NOTE expected `NotClone`, found `&NotClone`
114+ //~| NOTE expected `NotClone`, found `&NotClone`
115+ }
116+
117+ fn clone_thing11 ( nc : & NotClone ) -> NotClone {
118+ //~^ NOTE expected `NotClone` because of return type
119+ let a = {
120+ let nothing = nc. clone ( ) ;
121+ let a = nc. clone ( ) ;
122+ //~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
123+ let nothing = nc. clone ( ) ;
124+ a
125+ } ;
126+ a
127+ //~^ ERROR mismatched type
128+ //~| NOTE expected `NotClone`, found `&NotClone`
129+ }
0 commit comments