File tree 2 files changed +56
-0
lines changed
2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change @@ -156,3 +156,31 @@ fn main() {
156
156
let _z = y.map(RcWeak::clone);
157
157
}
158
158
}
159
+
160
+ // Ensures that it doesn't suggest `cloned` on `Arc` types.
161
+ fn issue_12612() {
162
+ use std::sync::Arc;
163
+
164
+ struct S2(Arc<String>);
165
+ struct S1(Option<S2>);
166
+
167
+ impl S1 {
168
+ fn v2(&self) -> Option<Arc<String>> {
169
+ self.v1().map(|v1| Arc::clone(&v1.0))
170
+ }
171
+
172
+ fn v3(&self) -> Option<Arc<String>> {
173
+ self.v1().map(|v1| {
174
+ let x = &v1.0;
175
+ Arc::clone(x)
176
+ })
177
+ }
178
+
179
+ fn v1(&self) -> Option<&S2> {
180
+ match &self.0 {
181
+ None => None,
182
+ Some(v) => Some(v),
183
+ }
184
+ }
185
+ }
186
+ }
Original file line number Diff line number Diff line change @@ -156,3 +156,31 @@ fn main() {
156
156
let _z = y. map ( RcWeak :: clone) ;
157
157
}
158
158
}
159
+
160
+ // Ensures that it doesn't suggest `cloned` on `Arc` types.
161
+ fn issue_12612 ( ) {
162
+ use std:: sync:: Arc ;
163
+
164
+ struct S2 ( Arc < String > ) ;
165
+ struct S1 ( Option < S2 > ) ;
166
+
167
+ impl S1 {
168
+ fn v2 ( & self ) -> Option < Arc < String > > {
169
+ self . v1 ( ) . map ( |v1| Arc :: clone ( & v1. 0 ) )
170
+ }
171
+
172
+ fn v3 ( & self ) -> Option < Arc < String > > {
173
+ self . v1 ( ) . map ( |v1| {
174
+ let x = & v1. 0 ;
175
+ Arc :: clone ( x)
176
+ } )
177
+ }
178
+
179
+ fn v1 ( & self ) -> Option < & S2 > {
180
+ match & self . 0 {
181
+ None => None ,
182
+ Some ( v) => Some ( v) ,
183
+ }
184
+ }
185
+ }
186
+ }
You can’t perform that action at this time.
0 commit comments