Skip to content

Commit 0fb2b7d

Browse files
committed
transpile: Use raw pointers for lvalues with side effects
1 parent f8c4945 commit 0fb2b7d

3 files changed

Lines changed: 12 additions & 11 deletions

File tree

c2rust-transpile/src/translator/named_references.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,12 @@ impl<'c> Translation<'c> {
127127
.borrow_mut()
128128
.pick_name("c2rust_lhs_side_effects");
129129

130-
// let ref mut p = lhs;
130+
// let p = &raw mut lhs;
131+
self.use_feature("raw_ref_op");
131132
let compute_ref = mk().local_stmt(Box::new(mk().local(
132-
mk().mutbl().ident_ref_pat(&ptr_name),
133+
mk().ident_pat(&ptr_name),
133134
None,
134-
Some(reference),
135+
Some(mk().mutbl().raw_borrow_expr(reference)),
135136
)));
136137

137138
let write =

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,17 @@ pub unsafe extern "C" fn inc_decl_with_lvalue_side_effect() {
7979
*lvalue_side_effect() -= 1;
8080
*lvalue_side_effect() += 1;
8181
*lvalue_side_effect() -= 1;
82-
let ref mut c2rust_lhs_side_effects = *lvalue_side_effect();
82+
let c2rust_lhs_side_effects = &raw mut *lvalue_side_effect();
8383
*c2rust_lhs_side_effects += 1;
8484
let mut pre_inc: ::core::ffi::c_int = *c2rust_lhs_side_effects;
85-
let ref mut c2rust_lhs_side_effects_0 = *lvalue_side_effect();
85+
let c2rust_lhs_side_effects_0 = &raw mut *lvalue_side_effect();
8686
*c2rust_lhs_side_effects_0 -= 1;
8787
let mut pre_dec: ::core::ffi::c_int = *c2rust_lhs_side_effects_0;
88-
let ref mut c2rust_lhs_side_effects_1 = *lvalue_side_effect();
88+
let c2rust_lhs_side_effects_1 = &raw mut *lvalue_side_effect();
8989
let c2rust_fresh2 = *c2rust_lhs_side_effects_1;
9090
*c2rust_lhs_side_effects_1 = *c2rust_lhs_side_effects_1 + 1;
9191
let mut post_inc: ::core::ffi::c_int = c2rust_fresh2;
92-
let ref mut c2rust_lhs_side_effects_2 = *lvalue_side_effect();
92+
let c2rust_lhs_side_effects_2 = &raw mut *lvalue_side_effect();
9393
let c2rust_fresh3 = *c2rust_lhs_side_effects_2;
9494
*c2rust_lhs_side_effects_2 = *c2rust_lhs_side_effects_2 - 1;
9595
let mut post_dec: ::core::ffi::c_int = c2rust_fresh3;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,17 @@ pub unsafe extern "C" fn inc_decl_with_lvalue_side_effect() {
7979
*lvalue_side_effect() -= 1;
8080
*lvalue_side_effect() += 1;
8181
*lvalue_side_effect() -= 1;
82-
let ref mut c2rust_lhs_side_effects = *lvalue_side_effect();
82+
let c2rust_lhs_side_effects = &raw mut *lvalue_side_effect();
8383
*c2rust_lhs_side_effects += 1;
8484
let mut pre_inc: ::core::ffi::c_int = *c2rust_lhs_side_effects;
85-
let ref mut c2rust_lhs_side_effects_0 = *lvalue_side_effect();
85+
let c2rust_lhs_side_effects_0 = &raw mut *lvalue_side_effect();
8686
*c2rust_lhs_side_effects_0 -= 1;
8787
let mut pre_dec: ::core::ffi::c_int = *c2rust_lhs_side_effects_0;
88-
let ref mut c2rust_lhs_side_effects_1 = *lvalue_side_effect();
88+
let c2rust_lhs_side_effects_1 = &raw mut *lvalue_side_effect();
8989
let c2rust_fresh2 = *c2rust_lhs_side_effects_1;
9090
*c2rust_lhs_side_effects_1 = *c2rust_lhs_side_effects_1 + 1;
9191
let mut post_inc: ::core::ffi::c_int = c2rust_fresh2;
92-
let ref mut c2rust_lhs_side_effects_2 = *lvalue_side_effect();
92+
let c2rust_lhs_side_effects_2 = &raw mut *lvalue_side_effect();
9393
let c2rust_fresh3 = *c2rust_lhs_side_effects_2;
9494
*c2rust_lhs_side_effects_2 = *c2rust_lhs_side_effects_2 - 1;
9595
let mut post_dec: ::core::ffi::c_int = c2rust_fresh3;

0 commit comments

Comments
 (0)