Skip to content

Commit 51826a0

Browse files
committed
transpile: Use raw pointers for lvalues with side effects
1 parent 2a42814 commit 51826a0

3 files changed

Lines changed: 6 additions & 5 deletions

File tree

c2rust-transpile/src/translator/named_references.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,12 @@ impl<'c> Translation<'c> {
124124

125125
let ptr_name = self.renamer.borrow_mut().fresh();
126126

127-
// let ref mut p = lhs;
127+
// let p = &raw mut lhs;
128+
self.use_feature("raw_ref_op");
128129
let compute_ref = mk().local_stmt(Box::new(mk().local(
129-
mk().mutbl().ident_ref_pat(&ptr_name),
130+
mk().ident_pat(&ptr_name),
130131
None,
131-
Some(reference),
132+
Some(mk().mutbl().raw_borrow_expr(reference)),
132133
)));
133134

134135
let write =

c2rust-transpile/tests/snapshots/snapshots__transpile@conditions.c.2021.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ pub unsafe extern "C" fn conditional_operator(
104104
let mut y: *mut ::core::ffi::c_int = (buf as *mut ::core::ffi::c_int)
105105
.offset(1 as ::core::ffi::c_int as isize)
106106
as *mut ::core::ffi::c_int;
107-
let ref mut c2rust_fresh0 = *if false { &raw mut y } else { &raw mut x };
107+
let c2rust_fresh0 = &raw mut *if false { &raw mut y } else { &raw mut x };
108108
*c2rust_fresh0 = 10 as ::core::ffi::c_int as *mut ::core::ffi::c_int;
109109
*(buf as *mut ::core::ffi::c_int).offset(2 as ::core::ffi::c_int as isize) = if true {
110110
2 as ::core::ffi::c_int

c2rust-transpile/tests/snapshots/snapshots__transpile@conditions.c.2024.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ pub unsafe extern "C" fn conditional_operator(
104104
let mut y: *mut ::core::ffi::c_int = (buf as *mut ::core::ffi::c_int)
105105
.offset(1 as ::core::ffi::c_int as isize)
106106
as *mut ::core::ffi::c_int;
107-
let ref mut c2rust_fresh0 = *if false { &raw mut y } else { &raw mut x };
107+
let c2rust_fresh0 = &raw mut *if false { &raw mut y } else { &raw mut x };
108108
*c2rust_fresh0 = 10 as ::core::ffi::c_int as *mut ::core::ffi::c_int;
109109
*(buf as *mut ::core::ffi::c_int).offset(2 as ::core::ffi::c_int as isize) = if true {
110110
2 as ::core::ffi::c_int

0 commit comments

Comments
 (0)