Skip to content

Commit beec6fd

Browse files
committed
Fix accessor context
1 parent 13f27f1 commit beec6fd

10 files changed

Lines changed: 33 additions & 17 deletions

‎cpp2rust/converter/models/converter_refcount.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1921,7 +1921,7 @@ void ConverterRefCount::ConvertUnionMemberAccessor(clang::MemberExpr *expr) {
19211921
std::string str;
19221922
{
19231923
Buffer buf(*this);
1924-
PushExprKind push(*this, isLValue() ? ExprKind::LValue : ExprKind::RValue);
1924+
PushExprKind push(*this, ExprKind::RValue);
19251925
Converter::ConvertMemberExpr(expr);
19261926
str = std::move(buf).str();
19271927
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ fn main_0() -> i32 {
114114
p.y = 4;
115115
assert!(((((p.x + p.y) == 7) as i32) != 0));
116116
let up: Value<point> = <Value<point>>::default();
117-
(*up.borrow_mut()).whole().write(5);
117+
(*up.borrow()).whole().write(5);
118118
assert!((((((*up.borrow()).whole().read()) == 5) as i32) != 0));
119119
let b: Value<slot_union> = <Value<slot_union>>::default();
120-
(*b.borrow_mut()).i().write(9);
120+
(*b.borrow()).i().write(9);
121121
assert!((((((*b.borrow()).i().read()) == 9) as i32) != 0));
122122
let mut e: slot = slot_SLOT_B;
123123
assert!(((((e as u32) == ((slot_SLOT_B as i32) as u32)) as i32) != 0));

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,26 @@ fn main_0() -> i32 {
5151
let u: Value<basic> = Rc::new(RefCell::new(<basic>::default()));
5252
let e: Value<empty> = Rc::new(RefCell::new(<empty>::default()));
5353
&(*e.borrow_mut());
54-
(*u.borrow_mut()).i().write(42);
54+
(*u.borrow()).i().write(42);
5555
assert!((((*u.borrow()).i().read()) == 42));
56-
(*u.borrow_mut()).f().write(3.140000105E+0);
56+
(*u.borrow()).f().write(3.140000105E+0);
5757
assert!((((*u.borrow()).f().read()) == 3.140000105E+0));
58+
let buf: Value<Box<[u8]>> = Rc::new(RefCell::new((0..4).map(|_| 0_u8).collect::<Box<[u8]>>()));
59+
{
60+
((buf.as_pointer() as Ptr<u8>) as Ptr<u8>)
61+
.to_any()
62+
.memset((0) as u8, ::std::mem::size_of::<[u8; 4]>() as usize);
63+
((buf.as_pointer() as Ptr<u8>) as Ptr<u8>).to_any()
64+
};
65+
let mut ru: Ptr<basic> = (buf.as_pointer() as Ptr<u8>).reinterpret_cast::<basic>();
66+
let mut pi: Ptr<i32> = ((*ru.upgrade().deref()).i()).clone();
67+
let mut pf: Ptr<f32> = ((*ru.upgrade().deref()).f()).clone();
68+
(*ru.upgrade().deref()).i().write(7);
69+
assert!(((pi.read()) == 7));
70+
pi.write(1065353216);
71+
assert!((((*ru.upgrade().deref()).i().read()) == 1065353216));
72+
assert!(((pf.read()) == 1.0E+0));
73+
assert!((((*buf.borrow())[(3) as usize] as i32) == 63));
5874
return 0;
5975
}
6076
pub fn __cpp2rust_init_globals() {}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ fn main_0() -> i32 {
9595
.memset((0) as u8, 68usize as usize);
9696
((c.as_pointer()) as Ptr<Container>).to_any()
9797
};
98-
field!((*c.borrow_mut()).u.a(), code).write(10_u16);
98+
field!((*c.borrow()).u.a(), code).write(10_u16);
9999
(*c.borrow_mut()).len = (28usize as u32);
100100
field!(
101101
(((*c.borrow()).u.a()).to_any().reinterpret_cast::<shape_b>()),
@@ -104,7 +104,7 @@ fn main_0() -> i32 {
104104
.write(3735928559_u32);
105105
assert!(((((*c.borrow()).u.b().with(|__s| __s.tail) == 3735928559_u32) as i32) != 0));
106106
assert!((((((*c.borrow()).u.b().with(|__s| __s.code) as i32) == 10) as i32) != 0));
107-
field!((*c.borrow_mut()).u.b(), lo).write(8080_u16);
107+
field!((*c.borrow()).u.b(), lo).write(8080_u16);
108108
assert!(
109109
(((((elem!(
110110
((((*c.borrow()).u.raw_().reinterpret_cast::<i8>()) as Ptr<i8>)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ fn main_0() -> i32 {
105105
(*ex.borrow_mut()).level = 1;
106106
(*ex.borrow_mut()).variant = 6;
107107
(*ex.borrow_mut()).len = (16usize as u32);
108-
field!((*ex.borrow_mut()).body.h(), code).write(2_u16);
108+
field!((*ex.borrow()).body.h(), code).write(2_u16);
109109
elem!(
110110
(array_field_ptr!((*ex.borrow()).body.h(), pad) as Ptr::<i8>),
111111
0

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub fn main() {
2929
fn main_0() -> i32 {
3030
let a: Value<node_a> = Rc::new(RefCell::new(node_a { n: 123 }));
3131
let ptr: Value<anon_0> = <Value<anon_0>>::default();
32-
(*ptr.borrow_mut()).to_a().write((a.as_pointer()));
32+
(*ptr.borrow()).to_a().write((a.as_pointer()));
3333
let mut out: Ptr<node_b> = ((*ptr.borrow()).to_b().read());
3434
assert!(((({ (out).to_any() } == { (a.as_pointer()).to_any() }) as i32) != 0));
3535
return 0;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn main() {
1313
fn main_0() -> i32 {
1414
let x: Value<i64> = Rc::new(RefCell::new((-1_i32 as i64)));
1515
let pp: Value<anon_0> = <Value<anon_0>>::default();
16-
(*pp.borrow_mut()).as_signed().write((x.as_pointer()));
16+
(*pp.borrow()).as_signed().write((x.as_pointer()));
1717
((*pp.borrow()).as_unsigned().read()).write(42_u64);
1818
assert!(((((*x.borrow()) == 42_i64) as i32) != 0));
1919
return 0;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ fn main_0() -> i32 {
6262
.memset((0) as u8, 16usize as usize);
6363
((outer.as_pointer()) as Ptr<Outer>).to_any()
6464
};
65-
field!((*outer.borrow_mut()).u.inner(), a).write(3);
66-
field!((*outer.borrow_mut()).u.inner(), b).write(4);
65+
field!((*outer.borrow()).u.inner(), a).write(3);
66+
field!((*outer.borrow()).u.inner(), b).write(4);
6767
assert!((((({ sum_inner_0(((*outer.borrow()).u.inner()).clone(),) }) == 7) as i32) != 0));
6868
assert!(
6969
((((((elem!(

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,21 @@ fn main_0() -> i32 {
8282
let buf16: Value<i16> = Rc::new(RefCell::new(0_i16));
8383
let s: Value<Sink> = <Value<Sink>>::default();
8484
(*s.borrow_mut()).width = Width_enum_W_64;
85-
(*s.borrow_mut())
85+
(*s.borrow())
8686
.out
8787
.handle()
8888
.write(((buf64.as_pointer()) as Ptr<i64>).to_any());
8989
({ write_count_1((s.as_pointer()), 1234605616436508552_i64) });
9090
assert!(((((*buf64.borrow()) == 1234605616436508552_i64) as i32) != 0));
9191
(*s.borrow_mut()).width = Width_enum_W_32;
92-
(*s.borrow_mut())
92+
(*s.borrow())
9393
.out
9494
.handle()
9595
.write(((buf32.as_pointer()) as Ptr<i32>).to_any());
9696
({ write_count_1((s.as_pointer()), 305419896_i64) });
9797
assert!(((((*buf32.borrow()) == 305419896) as i32) != 0));
9898
(*s.borrow_mut()).width = Width_enum_W_16;
99-
(*s.borrow_mut())
99+
(*s.borrow())
100100
.out
101101
.handle()
102102
.write(((buf16.as_pointer()) as Ptr<i16>).to_any());

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ fn main_0() -> i32 {
8181
});
8282
assert!(((({ (*ctx.borrow()).last_error } == 42) as i32) != 0));
8383
let v: Value<value> = <Value<value>>::default();
84-
(*v.borrow_mut()).l().write((1_i64 << 40));
84+
(*v.borrow()).l().write((1_i64 << 40));
8585
assert!((((({ pick_1(1, &[((*v.borrow()).clone()).into(),]) }) == (1_i64 << 40)) as i32) != 0));
86-
(*v.borrow_mut()).i().write(7);
86+
(*v.borrow()).i().write(7);
8787
assert!((((({ pick_1(0, &[((*v.borrow()).clone()).into(),]) }) == 7_i64) as i32) != 0));
8888
return 0;
8989
}

0 commit comments

Comments
 (0)