Skip to content

Commit 8512898

Browse files
committed
Takes are always fresh
1 parent 526315e commit 8512898

3 files changed

Lines changed: 15 additions & 13 deletions

File tree

‎cpp2rust/converter/converter.cpp‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4732,7 +4732,9 @@ std::string Converter::ConvertPlaceholder(clang::Expr *expr, clang::Expr *arg,
47324732
}
47334733
return ConvertFreshRValue(arg);
47344734
}
4735-
return std::format("std::mem::take(&mut {})", ConvertLValue(arg));
4735+
auto lvalue = ConvertLValue(arg);
4736+
SetFresh();
4737+
return std::format("std::mem::take(&mut {})", std::move(lvalue));
47364738
}
47374739

47384740
if (ph_ctx.access == TranslationRule::Access::kMove) {

‎tests/multi-file/defaulted_move_cross_tu/out/refcount/defaulted_move_cross_tu.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ impl S {
2626
}
2727
pub fn S_pmutS(_a0: Ptr<S>) -> Self {
2828
let __this: Value<S> = Rc::new(RefCell::new(Self {
29-
v: Rc::new(RefCell::new(
30-
(std::mem::take(&mut (*(*_a0.upgrade().deref()).v.borrow_mut()))).clone(),
31-
)),
29+
v: Rc::new(RefCell::new(std::mem::take(
30+
&mut (*(*_a0.upgrade().deref()).v.borrow_mut()),
31+
))),
3232
n: Rc::new(RefCell::new(Box::new(std::array::from_fn::<_, 2, _>(
3333
|__i: usize| (*(*_a0.upgrade().deref()).n.borrow())[(__i) as usize],
3434
)))),

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,12 @@ impl Buffer {
263263
}
264264
pub fn Buffer_pmutBuffer(_a0: Ptr<Buffer>) -> Self {
265265
let __this: Value<Buffer> = Rc::new(RefCell::new(Self {
266-
data: Rc::new(RefCell::new(
267-
(std::mem::take(&mut (*(*_a0.upgrade().deref()).data.borrow_mut()))).clone(),
268-
)),
269-
rows: Rc::new(RefCell::new(
270-
(std::mem::take(&mut (*(*_a0.upgrade().deref()).rows.borrow_mut()))).clone(),
271-
)),
266+
data: Rc::new(RefCell::new(std::mem::take(
267+
&mut (*(*_a0.upgrade().deref()).data.borrow_mut()),
268+
))),
269+
rows: Rc::new(RefCell::new(std::mem::take(
270+
&mut (*(*_a0.upgrade().deref()).rows.borrow_mut()),
271+
))),
272272
n: Rc::new(RefCell::new((*(*_a0.upgrade().deref()).n.borrow()))),
273273
arr: Rc::new(RefCell::new(Box::new(std::array::from_fn::<_, 2, _>(
274274
|__i: usize| (*(*_a0.upgrade().deref()).arr.borrow())[(__i) as usize],
@@ -321,9 +321,9 @@ pub struct Owner {
321321
impl Owner {
322322
pub fn Owner_pmutOwner(_a0: Ptr<Owner>) -> Self {
323323
let __this: Value<Owner> = Rc::new(RefCell::new(Self {
324-
data: Rc::new(RefCell::new(
325-
(std::mem::take(&mut (*(*_a0.upgrade().deref()).data.borrow_mut()))).clone(),
326-
)),
324+
data: Rc::new(RefCell::new(std::mem::take(
325+
&mut (*(*_a0.upgrade().deref()).data.borrow_mut()),
326+
))),
327327
n: Rc::new(RefCell::new((*(*_a0.upgrade().deref()).n.borrow()))),
328328
arr: Rc::new(RefCell::new(Box::new(std::array::from_fn::<_, 2, _>(
329329
|__i: usize| (*(*_a0.upgrade().deref()).arr.borrow())[(__i) as usize],

0 commit comments

Comments
 (0)