@@ -11,3 +11,119 @@ fn clone_thing(nc: &NotClone) -> NotClone {
11
11
//~| NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
12
12
//~| NOTE expected `NotClone`, found `&NotClone`
13
13
}
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