Skip to content

Commit a12bd34

Browse files
authored
Add more rules for move assignment and constructor (#362)
1 parent bd5f41a commit a12bd34

20 files changed

Lines changed: 211 additions & 0 deletions

‎rules/array/src.cpp‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,13 @@ template <typename T1, std::size_t T2>
2929
std::array<T1, T2> &f5(std::array<T1, T2> &dst, std::array<T1, T2> &&src) {
3030
return dst.operator=(std::move(src));
3131
}
32+
33+
template <typename T1, std::size_t T2>
34+
std::array<T1, T2> f6(const std::array<T1, T2> &o) {
35+
return std::array<T1, T2>(o);
36+
}
37+
38+
template <typename T1, std::size_t T2>
39+
std::array<T1, T2> &f7(std::array<T1, T2> &dst, const std::array<T1, T2> &src) {
40+
return dst.operator=(src);
41+
}

‎rules/array/tgt_refcount.rs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,7 @@ fn f3<T1>(a0: Ptr<T1>) -> Ptr<T1> {
1616
fn f5<T1: ByteRepr + Clone>(a0: Ptr<Vec<T1>>, a1: &mut Vec<T1>) {
1717
a0.write(std::mem::take(&mut *a1))
1818
}
19+
20+
fn f7<T1: Clone + ByteRepr>(a0: Ptr<Vec<T1>>, a1: Vec<T1>) {
21+
a0.write(a1.clone())
22+
}

‎rules/array/tgt_unsafe.rs‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,11 @@ unsafe fn f4<T1>(a0: &mut Vec<T1>) -> Vec<T1> {
2626
unsafe fn f5<T1>(a0: &mut Vec<T1>, a1: &mut Vec<T1>) {
2727
*a0 = std::mem::take(&mut *a1)
2828
}
29+
30+
unsafe fn f6<T1: Clone>(a0: Vec<T1>) -> Vec<T1> {
31+
a0.clone()
32+
}
33+
34+
unsafe fn f7<T1: Clone>(a0: &mut Vec<T1>, a1: Vec<T1>) {
35+
*a0 = a1.clone()
36+
}

‎rules/builtin/src.cpp‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright (c) 2022-present INESC-ID.
22
// Distributed under the MIT license that can be found in the LICENSE file.
33

4+
#include <stddef.h>
5+
46
#if defined(__linux__)
57
#include <byteswap.h>
68
#elif !defined(__APPLE__)
@@ -26,3 +28,7 @@ bool f10(long long a, long long b, long long *r) { return __builtin_mul_overflow
2628
#if defined(__x86_64__) || defined(__i386__)
2729
void f11(void) { return __builtin_ia32_pause(); }
2830
#endif
31+
32+
void *f14(void *dst, const void *src, size_t n) {
33+
return __builtin_memcpy(dst, src, n);
34+
}

‎rules/builtin/tgt_refcount.rs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,8 @@ fn f13(a0: i64, a1: i64, a2: Ptr<i64>) -> bool {
2323
a2.write(val);
2424
ovf
2525
}
26+
27+
fn f14(a0: AnyPtr, a1: AnyPtr, a2: usize) -> AnyPtr {
28+
a0.memcpy(&a1, a2 as usize);
29+
a0.clone()
30+
}

‎rules/builtin/tgt_unsafe.rs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,10 @@ unsafe fn f13(a0: i64, a1: i64, a2: *mut i64) -> bool {
5050
*a2 = val;
5151
ovf
5252
}
53+
54+
unsafe fn f14(a0: *mut u8, a1: *const u8, a2: usize) -> *mut u8 {
55+
if a2 != 0 {
56+
::std::ptr::copy_nonoverlapping(a1, a0, a2 as usize)
57+
}
58+
a0
59+
}

‎rules/deque/src.cpp‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,21 @@ template <typename T1>
2222
void f7(std::deque<std::vector<T1>> &o, const std::vector<T1> &value) {
2323
return o.push_back(value);
2424
}
25+
26+
template <typename T1> std::deque<T1> f8(const std::deque<T1> &o) {
27+
return std::deque<T1>(o);
28+
}
29+
30+
template <typename T1> std::deque<T1> f9(std::deque<T1> &&o) {
31+
return std::deque<T1>(std::move(o));
32+
}
33+
34+
template <typename T1>
35+
std::deque<T1> &f10(std::deque<T1> &dst, const std::deque<T1> &src) {
36+
return dst.operator=(src);
37+
}
38+
39+
template <typename T1>
40+
std::deque<T1> &f11(std::deque<T1> &dst, std::deque<T1> &&src) {
41+
return dst.operator=(std::move(src));
42+
}

‎rules/deque/tgt_refcount.rs‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,11 @@ fn f2<T1>(a0: Ptr<T1>) -> Ptr<T1> {
1616
fn f7<T1: ByteRepr>(a0: Ptr<Vec<Value<Vec<T1>>>>, a1: Value<Vec<T1>>) {
1717
a0.with_mut(|__v: &mut Vec<Value<Vec<T1>>>| __v.push(a1))
1818
}
19+
20+
fn f10<T1: Clone + ByteRepr>(a0: Ptr<Vec<T1>>, a1: Vec<T1>) {
21+
a0.write(a1.clone())
22+
}
23+
24+
fn f11<T1: ByteRepr + Clone>(a0: Ptr<Vec<T1>>, a1: &mut Vec<T1>) {
25+
a0.write(std::mem::take(&mut *a1))
26+
}

‎rules/deque/tgt_unsafe.rs‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,19 @@ unsafe fn f5<T1>(a0: &mut Vec<T1>) -> T1 {
3232
unsafe fn f7<T1>(a0: &mut Vec<Vec<T1>>, a1: Vec<T1>) {
3333
a0.push(a1)
3434
}
35+
36+
unsafe fn f8<T1: Clone>(a0: Vec<T1>) -> Vec<T1> {
37+
a0.clone()
38+
}
39+
40+
unsafe fn f9<T1>(a0: &mut Vec<T1>) -> Vec<T1> {
41+
std::mem::take(&mut *a0)
42+
}
43+
44+
unsafe fn f10<T1: Clone>(a0: &mut Vec<T1>, a1: Vec<T1>) {
45+
*a0 = a1.clone()
46+
}
47+
48+
unsafe fn f11<T1>(a0: &mut Vec<T1>, a1: &mut Vec<T1>) {
49+
*a0 = std::mem::take(&mut *a1)
50+
}

‎rules/map/src.cpp‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,8 @@ template <typename T1, typename T2>
126126
std::map<T1, T2> &f25(std::map<T1, T2> &dst, std::map<T1, T2> &&src) {
127127
return dst.operator=(std::move(src));
128128
}
129+
130+
template <typename T1, typename T2>
131+
std::map<T1, T2> &f26(std::map<T1, T2> &dst, const std::map<T1, T2> &src) {
132+
return dst.operator=(src);
133+
}

0 commit comments

Comments
 (0)