Skip to content

Commit 29ca5fd

Browse files
Add regression test for #12612
1 parent 2202493 commit 29ca5fd

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

tests/ui/map_clone.fixed

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,31 @@ fn main() {
156156
let _z = y.map(RcWeak::clone);
157157
}
158158
}
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+
}

tests/ui/map_clone.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,31 @@ fn main() {
156156
let _z = y.map(RcWeak::clone);
157157
}
158158
}
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+
}

0 commit comments

Comments
 (0)