Skip to content

Commit 3b78ca8

Browse files
committed
Fix rule for move vector
1 parent 3c8a146 commit 3b78ca8

4 files changed

Lines changed: 18 additions & 10 deletions

File tree

‎rules/vector/tgt_refcount.rs‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ fn f30<T1: Default + Clone>(a0: usize) -> Vec<Value<Vec<T1>>> {
109109
.collect::<Vec<_>>()
110110
}
111111

112-
fn f31<T1: ByteRepr + Clone>(a0: Ptr<Vec<Value<Vec<T1>>>>, a1: Vec<T1>) {
113-
a0.with_mut(|__v: &mut Vec<Value<Vec<T1>>>| __v.push(Rc::new(RefCell::new(a1))))
112+
fn f31<T1: ByteRepr + Clone>(a0: Ptr<Vec<Value<Vec<T1>>>>, a1: &mut Vec<T1>) {
113+
a0.with_mut(|__v: &mut Vec<Value<Vec<T1>>>| {
114+
__v.push(Rc::new(RefCell::new(std::mem::take(&mut *a1))))
115+
})
114116
}
115117

116118
fn f32<T1: Default + ByteRepr>(a0: Ptr<Vec<Value<Vec<T1>>>>, a1: usize) {

‎rules/vector/tgt_unsafe.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ unsafe fn f30<T1: Default + Clone>(a0: usize) -> Vec<Vec<T1>> {
138138
.map(|_| <Vec<T1>>::default())
139139
.collect::<Vec<_>>()
140140
}
141-
unsafe fn f31<T1>(a0: &mut Vec<Vec<T1>>, a1: Vec<T1>) {
142-
a0.push(a1)
141+
unsafe fn f31<T1>(a0: &mut Vec<Vec<T1>>, a1: &mut Vec<T1>) {
142+
a0.push(std::mem::take(&mut *a1))
143143
}
144144
unsafe fn f32<T1: Default>(a0: &mut Vec<Vec<T1>>, a1: usize) {
145145
a0.resize_with(a1 as usize, || <Vec<T1>>::default())

‎tests/unit/out/refcount/foreach_double.rs‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,21 @@ fn main_0() -> i32 {
5252
let m: Value<Vec<Value<Vec<i32>>>> = Rc::new(RefCell::new(Vec::new()));
5353
let v1: Value<Vec<i32>> = Rc::new(RefCell::new(Vec::new()));
5454
(m.as_pointer() as Ptr<Vec<Value<Vec<i32>>>>).with_mut(|__v: &mut Vec<Value<Vec<i32>>>| {
55-
__v.push(Rc::new(RefCell::new((*v1.borrow()).clone())))
55+
__v.push(Rc::new(RefCell::new(std::mem::take(
56+
&mut (*v1.borrow_mut()),
57+
))))
5658
});
5759
let v2: Value<Vec<i32>> = Rc::new(RefCell::new(Vec::new()));
5860
(m.as_pointer() as Ptr<Vec<Value<Vec<i32>>>>).with_mut(|__v: &mut Vec<Value<Vec<i32>>>| {
59-
__v.push(Rc::new(RefCell::new((*v2.borrow()).clone())))
61+
__v.push(Rc::new(RefCell::new(std::mem::take(
62+
&mut (*v2.borrow_mut()),
63+
))))
6064
});
6165
let v3: Value<Vec<i32>> = Rc::new(RefCell::new(Vec::new()));
6266
(m.as_pointer() as Ptr<Vec<Value<Vec<i32>>>>).with_mut(|__v: &mut Vec<Value<Vec<i32>>>| {
63-
__v.push(Rc::new(RefCell::new((*v3.borrow()).clone())))
67+
__v.push(Rc::new(RefCell::new(std::mem::take(
68+
&mut (*v3.borrow_mut()),
69+
))))
6470
});
6571
'loop_: for mut row in m.as_pointer() as Ptr<Value<Vec<i32>>> {
6672
let row: Ptr<Vec<i32>> = row.upgrade().deref().as_pointer();

‎tests/unit/out/unsafe/foreach_double.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ unsafe fn main_0() -> i32 {
4747
}
4848
let mut m: Vec<Vec<i32>> = Vec::new();
4949
let mut v1: Vec<i32> = Vec::new();
50-
m.push((v1).clone());
50+
m.push(std::mem::take(&mut v1));
5151
let mut v2: Vec<i32> = Vec::new();
52-
m.push((v2).clone());
52+
m.push(std::mem::take(&mut v2));
5353
let mut v3: Vec<i32> = Vec::new();
54-
m.push((v3).clone());
54+
m.push(std::mem::take(&mut v3));
5555
'loop_: for row in 0..(m.len()) {
5656
let mut row = m.as_mut_ptr().add(row);
5757
'loop_: for col in 0..((*row).len()) {

0 commit comments

Comments
 (0)