Skip to content

Commit 192ca74

Browse files
authored
Handle ops between i64 and isize (#199)
1 parent cb98d54 commit 192ca74

4 files changed

Lines changed: 30 additions & 1 deletion

File tree

cpp2rust/converter/converter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2235,7 +2235,7 @@ void Converter::ConvertBinaryOperator(clang::BinaryOperator *expr) {
22352235
auto op = opcode_as_string;
22362236
op.remove_suffix(1); // remove '=' from operator
22372237
StrCat(op);
2238-
Convert(rhs);
2238+
Convert(rhs, computation_result_type);
22392239
}
22402240
if (lhs_type->isBooleanType()) {
22412241
StrCat(token::kDiff, token::kZero);

tests/unit/out/refcount/size_t_ssize_t.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,5 +211,14 @@ fn main_0() -> i32 {
211211
(((*sz.borrow()) as isize) - ((*ul.borrow()) as isize)),
212212
));
213213
assert!(((*delta.borrow()) == 11_isize));
214+
let a64: Value<i64> = Rc::new(RefCell::new(100_i64));
215+
let b: Value<isize> = Rc::new(RefCell::new(30_isize));
216+
(*a64.borrow_mut()) -= ((*b.borrow()) as i64);
217+
assert!(((*a64.borrow()) == 70_i64));
218+
(*a64.borrow_mut()) += ((*b.borrow()) as i64);
219+
assert!(((*a64.borrow()) == 100_i64));
220+
let c: Value<isize> = Rc::new(RefCell::new((-20_i32 as isize)));
221+
(*a64.borrow_mut()) -= ((*c.borrow()) as i64);
222+
assert!(((*a64.borrow()) == 120_i64));
214223
return (((*n.borrow()).wrapping_rem(7_usize)) as i32);
215224
}

tests/unit/out/unsafe/size_t_ssize_t.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,14 @@ unsafe fn main_0() -> i32 {
156156
assert!(((smax) == (15_isize)));
157157
let mut delta: isize = ((sz as isize) - (ul as isize));
158158
assert!(((delta) == (11_isize)));
159+
let mut a64: i64 = 100_i64;
160+
let mut b: isize = 30_isize;
161+
a64 -= (b as i64);
162+
assert!(((a64) == (70_i64)));
163+
a64 += (b as i64);
164+
assert!(((a64) == (100_i64)));
165+
let mut c: isize = (-20_i32 as isize);
166+
a64 -= (c as i64);
167+
assert!(((a64) == (120_i64)));
159168
return (((n).wrapping_rem(7_usize)) as i32);
160169
}

tests/unit/size_t_ssize_t.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,16 @@ int main() {
8585
ssize_t delta = (ssize_t)sz - (ssize_t)ul;
8686
assert(delta == 11);
8787

88+
typedef long long ll_t;
89+
ll_t a64 = 100;
90+
ssize_t b = 30;
91+
a64 -= b;
92+
assert(a64 == 70);
93+
a64 += b;
94+
assert(a64 == 100);
95+
ssize_t c = -20;
96+
a64 -= c;
97+
assert(a64 == 120);
98+
8899
return (int)(n % 7);
89100
}

0 commit comments

Comments
 (0)