Skip to content

Commit 1d727cf

Browse files
Read repeated-append length before resizing
Signed-off-by: Perfloop Agent <agent@perfloop.ai> Signed-off-by: Tomás Senart <ts@perfloop.ai>
1 parent b6065cf commit 1d727cf

2 files changed

Lines changed: 10 additions & 18 deletions

File tree

‎rules/string/tgt_refcount.rs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ fn f18(a0: Vec<i8>, a1: Ptr<i8>) -> bool {
122122
// TODO: This should return a0
123123
fn f21(a0: &mut Vec<i8>, a1: usize, a2: i8) -> Vec<i8> {
124124
a0.pop();
125-
a0.resize(a0.len() + (a1) as usize, a2);
125+
let __len = a0.len() + (a1) as usize;
126+
a0.resize(__len, a2);
126127
a0.push(0);
127128
a0.clone()
128129
}

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

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,8 @@ use std::rc::{Rc, Weak};
99
pub fn append_to_reference_0(s: Ptr<Vec<i8>>) {
1010
{
1111
s.with_mut(|__v: &mut Vec<i8>| __v.pop());
12-
s.with_mut(|__v: &mut Vec<i8>| {
13-
__v.resize(
14-
(*s.upgrade().deref()).len() + (1_usize) as usize,
15-
('r' as i8),
16-
)
17-
});
12+
let __len = (*s.upgrade().deref()).len() + (1_usize) as usize;
13+
s.with_mut(|__v: &mut Vec<i8>| __v.resize(__len, ('r' as i8)));
1814
s.with_mut(|__v: &mut Vec<i8>| __v.push(0));
1915
(*s.upgrade().deref()).clone()
2016
};
@@ -98,10 +94,8 @@ fn main_0() -> i32 {
9894
}
9995
{
10096
(*s.borrow_mut()).pop();
101-
(*s.borrow_mut()).resize(
102-
(*s.borrow()).len() + (count) as usize,
103-
({ (*character.borrow()) }),
104-
);
97+
let __len = (*s.borrow()).len() + (count) as usize;
98+
(*s.borrow_mut()).resize(__len, ({ (*character.borrow()) }));
10599
(*s.borrow_mut()).push(0);
106100
(*s.borrow()).clone()
107101
};
@@ -138,7 +132,8 @@ fn main_0() -> i32 {
138132
};
139133
{
140134
unboxed.pop();
141-
unboxed.resize(unboxed.len() + (2_usize) as usize, ('b' as i8));
135+
let __len = unboxed.len() + (2_usize) as usize;
136+
unboxed.resize(__len, ('b' as i8));
142137
unboxed.push(0);
143138
unboxed.clone()
144139
};
@@ -162,12 +157,8 @@ fn main_0() -> i32 {
162157
let mut pointer: Ptr<Vec<i8>> = (indirect.as_pointer());
163158
{
164159
pointer.with_mut(|__v: &mut Vec<i8>| __v.pop());
165-
pointer.with_mut(|__v: &mut Vec<i8>| {
166-
__v.resize(
167-
(*pointer.upgrade().deref()).len() + (0_usize) as usize,
168-
('\0' as i8),
169-
)
170-
});
160+
let __len = (*pointer.upgrade().deref()).len() + (0_usize) as usize;
161+
pointer.with_mut(|__v: &mut Vec<i8>| __v.resize(__len, ('\0' as i8)));
171162
pointer.with_mut(|__v: &mut Vec<i8>| __v.push(0));
172163
(*pointer.upgrade().deref()).clone()
173164
};

0 commit comments

Comments
 (0)