Skip to content

Commit 9808647

Browse files
committed
Delete array subscript cast if type is already usize
1 parent 7b380db commit 9808647

32 files changed

Lines changed: 311 additions & 327 deletions

cpp2rust/converter/converter.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3637,7 +3637,10 @@ void Converter::ConvertArraySubscript(clang::Expr *base, clang::Expr *idx,
36373637
PushParen paren(*this);
36383638
Convert(idx);
36393639
}
3640-
StrCat(keyword::kAs, "usize");
3640+
3641+
if (Mapper::Map(idx->getType()) != "usize") {
3642+
StrCat(keyword::kAs, "usize");
3643+
}
36413644
}
36423645

36433646
void Converter::ConvertAssignment(clang::Expr *lhs, clang::Expr *rhs,

tests/ub/out/unsafe/ub6.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ pub unsafe fn fill_1(arr: *mut Option<Box<[*mut i32]>>, n1: *mut i32) {
2222
let _x2: *mut i32 = &mut n2 as *mut i32;
2323
mkPair_0(_x1, _x2)
2424
});
25-
(*arr).as_mut().unwrap()[(0_usize) as usize] = (pair.x1);
26-
(*arr).as_mut().unwrap()[(1_usize) as usize] = (pair.x2);
25+
(*arr).as_mut().unwrap()[(0_usize)] = (pair.x1);
26+
(*arr).as_mut().unwrap()[(1_usize)] = (pair.x2);
2727
}
2828
pub unsafe fn any_2(arr: *mut Option<Box<[*mut i32]>>, n1: *mut i32) -> bool {
2929
let mut out: bool = false;
3030
let mut i: i32 = 0;
3131
'loop_: while ((i) < (*n1)) {
32-
out = (out) || ((*(*arr).as_mut().unwrap()[(i as usize) as usize]) == (0));
32+
out = (out) || ((*(*arr).as_mut().unwrap()[(i as usize)]) == (0));
3333
i.prefix_inc();
3434
}
3535
return out;

tests/unit/out/unsafe/08_unique_array.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ pub fn main() {
1414
unsafe fn main_0() -> i32 {
1515
let mut g: Option<Box<[i32]>> =
1616
Some((0..2_usize).map(|_| <i32>::default()).collect::<Box<[_]>>());
17-
g.as_mut().unwrap()[(0_usize) as usize] = 11;
18-
g.as_mut().unwrap()[(1_usize) as usize] = 12;
17+
g.as_mut().unwrap()[(0_usize)] = 11;
18+
g.as_mut().unwrap()[(1_usize)] = 12;
1919
let mut g_ptr: *mut i32 = g
2020
.as_deref_mut()
2121
.map_or(::std::ptr::null_mut(), |s| s.as_mut_ptr());
2222
(*g_ptr.offset((0) as isize)) = 13;
2323
(*g_ptr.offset((1) as isize)) = 14;
24-
return ((g.as_mut().unwrap()[(0_usize) as usize]) + (g.as_mut().unwrap()[(1_usize) as usize]));
24+
return ((g.as_mut().unwrap()[(0_usize)]) + (g.as_mut().unwrap()[(1_usize)]));
2525
}

tests/unit/out/unsafe/alloc_array.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub unsafe fn All_0(arr: *mut Option<Box<[i32]>>, mut N: i32, mut element: i32)
1414
);
1515
let mut i: i32 = 0;
1616
'loop_: while ((i) < (N)) {
17-
all.as_mut().unwrap()[(i as usize) as usize] = element;
17+
all.as_mut().unwrap()[(i as usize)] = element;
1818
i.prefix_inc();
1919
}
2020
(*arr) = all;
@@ -23,7 +23,7 @@ pub unsafe fn Consume_1(mut arr: Option<Box<[i32]>>, mut N: i32) -> i32 {
2323
let mut sum: i32 = 0;
2424
let mut i: i32 = -1_i32;
2525
'loop_: while ((i.prefix_inc()) < (N)) {
26-
sum += arr.as_mut().unwrap()[(i as usize) as usize];
26+
sum += arr.as_mut().unwrap()[(i as usize)];
2727
}
2828
return sum;
2929
}

tests/unit/out/unsafe/char_printing.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ unsafe fn main_0() -> i32 {
3838
)
3939
.write_all(
4040
&([
41-
(&[vec_[(0_usize) as usize]] as &[u8]),
42-
(&[vec_[(1_usize) as usize]] as &[u8]),
41+
(&[vec_[(0_usize)]] as &[u8]),
42+
(&[vec_[(1_usize)]] as &[u8]),
4343
(&[('o' as u8)] as &[u8]),
4444
(&(str)[..(str).len() - 1] as &[u8]),
4545
(&[b'\n'] as &[u8]),
@@ -102,9 +102,9 @@ unsafe fn main_0() -> i32 {
102102
)
103103
.write_all(
104104
&([
105-
(&[vec_[(0_usize) as usize]] as &[u8]),
105+
(&[vec_[(0_usize)]] as &[u8]),
106106
(&[('\n' as u8)] as &[u8]),
107-
(&[vec_[(1_usize) as usize]] as &[u8]),
107+
(&[vec_[(1_usize)]] as &[u8]),
108108
(&[('\n' as u8)] as &[u8]),
109109
]
110110
.concat()),

tests/unit/out/unsafe/char_printing_cerr.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ unsafe fn main_0() -> i32 {
3838
)
3939
.write_all(
4040
&([
41-
(&[vec_[(0_usize) as usize]] as &[u8]),
42-
(&[vec_[(1_usize) as usize]] as &[u8]),
41+
(&[vec_[(0_usize)]] as &[u8]),
42+
(&[vec_[(1_usize)]] as &[u8]),
4343
(&[('o' as u8)] as &[u8]),
4444
(&(str)[..(str).len() - 1] as &[u8]),
4545
(&[b'\n'] as &[u8]),
@@ -102,9 +102,9 @@ unsafe fn main_0() -> i32 {
102102
)
103103
.write_all(
104104
&([
105-
(&[vec_[(0_usize) as usize]] as &[u8]),
105+
(&[vec_[(0_usize)]] as &[u8]),
106106
(&[('\n' as u8)] as &[u8]),
107-
(&[vec_[(1_usize) as usize]] as &[u8]),
107+
(&[vec_[(1_usize)]] as &[u8]),
108108
(&[('\n' as u8)] as &[u8]),
109109
]
110110
.concat()),

tests/unit/out/unsafe/clone_vs_move.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,18 @@ unsafe fn main_0() -> i32 {
111111
let mut v2: Vec<i32> = v1.clone();
112112
let mut i: i32 = 0;
113113
'loop_: while ((i) < (N)) {
114-
assert!(((v2[(i as usize) as usize]) == (i)));
114+
assert!(((v2[(i as usize)]) == (i)));
115115
i.prefix_inc();
116116
}
117117
let mut i: i32 = 0;
118118
'loop_: while ((i) < (N)) {
119-
v2[(i as usize) as usize].prefix_inc();
119+
v2[(i as usize)].prefix_inc();
120120
i.prefix_inc();
121121
}
122122
let mut i: i32 = 0;
123123
'loop_: while ((i) < (N)) {
124-
assert!(((v2[(i as usize) as usize]) == ((i) + (1))));
125-
assert!(((v1[(i as usize) as usize]) == (i)));
124+
assert!(((v2[(i as usize)]) == ((i) + (1))));
125+
assert!(((v1[(i as usize)]) == (i)));
126126
i.prefix_inc();
127127
}
128128
let mut m1: Vec<Vec<i32>> = Vec::new();
@@ -138,12 +138,12 @@ unsafe fn main_0() -> i32 {
138138
let mut m2: Vec<Vec<i32>> = m1.clone();
139139
let mut i: i32 = 0;
140140
'loop_: while ((i) < (N)) {
141-
assert!(((m1[(i as usize) as usize].len()) == (10_usize)));
142-
assert!(((m2[(i as usize) as usize].len()) == (10_usize)));
141+
assert!(((m1[(i as usize)].len()) == (10_usize)));
142+
assert!(((m2[(i as usize)].len()) == (10_usize)));
143143
let mut j: i32 = 0;
144144
'loop_: while ((j) < (10)) {
145-
assert!(((m1[(i as usize) as usize][(j as usize) as usize]) == (0)));
146-
assert!(((m2[(i as usize) as usize][(j as usize) as usize]) == (0)));
145+
assert!(((m1[(i as usize)][(j as usize)]) == (0)));
146+
assert!(((m2[(i as usize)][(j as usize)]) == (0)));
147147
j.prefix_inc();
148148
}
149149
i.prefix_inc();
@@ -152,19 +152,19 @@ unsafe fn main_0() -> i32 {
152152
'loop_: while ((i) < (N)) {
153153
let mut j: i32 = 0;
154154
'loop_: while ((j) < (10)) {
155-
m2[(i as usize) as usize][(j as usize) as usize].postfix_inc();
155+
m2[(i as usize)][(j as usize)].postfix_inc();
156156
j.prefix_inc();
157157
}
158158
i.prefix_inc();
159159
}
160160
let mut i: i32 = 0;
161161
'loop_: while ((i) < (N)) {
162-
assert!(((m1[(i as usize) as usize].len()) == (10_usize)));
163-
assert!(((m2[(i as usize) as usize].len()) == (10_usize)));
162+
assert!(((m1[(i as usize)].len()) == (10_usize)));
163+
assert!(((m2[(i as usize)].len()) == (10_usize)));
164164
let mut j: i32 = 0;
165165
'loop_: while ((j) < (10)) {
166-
assert!(((m1[(i as usize) as usize][(j as usize) as usize]) == (0)));
167-
assert!(((m2[(i as usize) as usize][(j as usize) as usize]) == (1)));
166+
assert!(((m1[(i as usize)][(j as usize)]) == (0)));
167+
assert!(((m2[(i as usize)][(j as usize)]) == (1)));
168168
j.prefix_inc();
169169
}
170170
i.prefix_inc();
@@ -216,15 +216,15 @@ unsafe fn main_0() -> i32 {
216216
.chain(std::iter::once(0))
217217
.collect();
218218
let mut s2: Vec<u8> = s1.clone();
219-
s2[(0_usize) as usize] = ('b' as u8);
220-
s2[(1_usize) as usize] = ('b' as u8);
221-
s2[(2_usize) as usize] = ('b' as u8);
222-
assert!(((s2[(0_usize) as usize] as i32) == (('b' as u8) as i32)));
223-
assert!(((s2[(1_usize) as usize] as i32) == (('b' as u8) as i32)));
224-
assert!(((s2[(2_usize) as usize] as i32) == (('b' as u8) as i32)));
225-
assert!(((s1[(0_usize) as usize] as i32) == (('a' as u8) as i32)));
226-
assert!(((s1[(1_usize) as usize] as i32) == (('a' as u8) as i32)));
227-
assert!(((s1[(2_usize) as usize] as i32) == (('a' as u8) as i32)));
219+
s2[(0_usize)] = ('b' as u8);
220+
s2[(1_usize)] = ('b' as u8);
221+
s2[(2_usize)] = ('b' as u8);
222+
assert!(((s2[(0_usize)] as i32) == (('b' as u8) as i32)));
223+
assert!(((s2[(1_usize)] as i32) == (('b' as u8) as i32)));
224+
assert!(((s2[(2_usize)] as i32) == (('b' as u8) as i32)));
225+
assert!(((s1[(0_usize)] as i32) == (('a' as u8) as i32)));
226+
assert!(((s1[(1_usize)] as i32) == (('a' as u8) as i32)));
227+
assert!(((s1[(2_usize)] as i32) == (('a' as u8) as i32)));
228228
let mut b1: Bar = Bar { w: 1 };
229229
let mut b2: Bar = Bar { w: 2 };
230230
b2 = b1;
@@ -235,14 +235,14 @@ unsafe fn main_0() -> i32 {
235235
v4 = v2.clone();
236236
let mut i: i32 = 0;
237237
'loop_: while ((i) < (N)) {
238-
assert!(((v4[(i as usize) as usize]) == ((i) + (1))));
239-
v4[(i as usize) as usize].prefix_inc();
238+
assert!(((v4[(i as usize)]) == ((i) + (1))));
239+
v4[(i as usize)].prefix_inc();
240240
i.prefix_inc();
241241
}
242242
let mut i: i32 = 0;
243243
'loop_: while ((i) < (N)) {
244-
assert!(((v4[(i as usize) as usize]) == ((i) + (2))));
245-
assert!(((v2[(i as usize) as usize]) == ((i) + (1))));
244+
assert!(((v4[(i as usize)]) == ((i) + (2))));
245+
assert!(((v2[(i as usize)]) == ((i) + (1))));
246246
i.prefix_inc();
247247
}
248248
return 0;

tests/unit/out/unsafe/fft.rs

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ pub unsafe fn fft_3(a: *mut Option<Box<[Complex]>>, mut N: i32) -> Option<Box<[C
4040
.collect::<Box<[_]>>(),
4141
);
4242
if ((N) == (1)) {
43-
y.as_mut().unwrap()[(0_usize) as usize] = Complex {
44-
re: (*a).as_mut().unwrap()[(0_usize) as usize].re,
45-
img: (*a).as_mut().unwrap()[(0_usize) as usize].img,
43+
y.as_mut().unwrap()[(0_usize)] = Complex {
44+
re: (*a).as_mut().unwrap()[(0_usize)].re,
45+
img: (*a).as_mut().unwrap()[(0_usize)].img,
4646
};
4747
return y;
4848
}
@@ -54,7 +54,7 @@ pub unsafe fn fft_3(a: *mut Option<Box<[Complex]>>, mut N: i32) -> Option<Box<[C
5454
let mut i: i32 = 0;
5555
'loop_: while ((i) < (N)) {
5656
let mut alpha: f64 = ((((-2_i32 as f64) * (3.141592654E+0)) * (i as f64)) / (N as f64));
57-
w.as_mut().unwrap()[(i as usize) as usize] = Complex {
57+
w.as_mut().unwrap()[(i as usize)] = Complex {
5858
re: alpha.cos(),
5959
img: alpha.sin(),
6060
};
@@ -72,13 +72,13 @@ pub unsafe fn fft_3(a: *mut Option<Box<[Complex]>>, mut N: i32) -> Option<Box<[C
7272
);
7373
let mut i: i32 = 0;
7474
'loop_: while ((i) < ((N) / (2))) {
75-
A0.as_mut().unwrap()[(i as usize) as usize] = Complex {
76-
re: (*a).as_mut().unwrap()[(((i) * (2)) as usize) as usize].re,
77-
img: (*a).as_mut().unwrap()[(((i) * (2)) as usize) as usize].img,
75+
A0.as_mut().unwrap()[(i as usize)] = Complex {
76+
re: (*a).as_mut().unwrap()[(((i) * (2)) as usize)].re,
77+
img: (*a).as_mut().unwrap()[(((i) * (2)) as usize)].img,
7878
};
79-
A1.as_mut().unwrap()[(i as usize) as usize] = Complex {
80-
re: (*a).as_mut().unwrap()[((((i) * (2)) + (1)) as usize) as usize].re,
81-
img: (*a).as_mut().unwrap()[((((i) * (2)) + (1)) as usize) as usize].img,
79+
A1.as_mut().unwrap()[(i as usize)] = Complex {
80+
re: (*a).as_mut().unwrap()[((((i) * (2)) + (1)) as usize)].re,
81+
img: (*a).as_mut().unwrap()[((((i) * (2)) + (1)) as usize)].img,
8282
};
8383
i.postfix_inc();
8484
}
@@ -95,31 +95,31 @@ pub unsafe fn fft_3(a: *mut Option<Box<[Complex]>>, mut N: i32) -> Option<Box<[C
9595
let mut k: i32 = 0;
9696
'loop_: while ((k) < ((N) / (2))) {
9797
let mut yk: Complex = (unsafe {
98-
let _z1: Complex = y0.as_mut().unwrap()[(k as usize) as usize].clone();
98+
let _z1: Complex = y0.as_mut().unwrap()[(k as usize)].clone();
9999
let _z2: Complex = (unsafe {
100-
let _z1: Complex = w.as_mut().unwrap()[(k as usize) as usize].clone();
101-
let _z2: Complex = y1.as_mut().unwrap()[(k as usize) as usize].clone();
100+
let _z1: Complex = w.as_mut().unwrap()[(k as usize)].clone();
101+
let _z2: Complex = y1.as_mut().unwrap()[(k as usize)].clone();
102102
Product_0(_z1, _z2)
103103
});
104104
Sum_1(_z1, _z2)
105105
});
106-
y.as_mut().unwrap()[(k as usize) as usize] = Complex {
106+
y.as_mut().unwrap()[(k as usize)] = Complex {
107107
re: yk.re,
108108
img: yk.img,
109109
};
110110
let mut yk_n2: Complex = (unsafe {
111-
let _z1: Complex = y0.as_mut().unwrap()[(k as usize) as usize].clone();
111+
let _z1: Complex = y0.as_mut().unwrap()[(k as usize)].clone();
112112
let _z2: Complex = (unsafe {
113113
let _z1: Complex = (unsafe {
114-
let _z1: Complex = w.as_mut().unwrap()[(k as usize) as usize].clone();
115-
let _z2: Complex = y1.as_mut().unwrap()[(k as usize) as usize].clone();
114+
let _z1: Complex = w.as_mut().unwrap()[(k as usize)].clone();
115+
let _z2: Complex = y1.as_mut().unwrap()[(k as usize)].clone();
116116
Product_0(_z1, _z2)
117117
});
118118
Neg_2(_z1)
119119
});
120120
Sum_1(_z1, _z2)
121121
});
122-
y.as_mut().unwrap()[(((k) + ((N) / (2))) as usize) as usize] = Complex {
122+
y.as_mut().unwrap()[(((k) + ((N) / (2))) as usize)] = Complex {
123123
re: yk_n2.re,
124124
img: yk_n2.img,
125125
};
@@ -141,7 +141,7 @@ unsafe fn main_0() -> i32 {
141141
);
142142
let mut i: i32 = 0;
143143
'loop_: while ((i) < (N)) {
144-
a.as_mut().unwrap()[(i as usize) as usize] = Complex {
144+
a.as_mut().unwrap()[(i as usize)] = Complex {
145145
re: ((i as f64) + (1_f64)),
146146
img: 0_f64,
147147
};
@@ -164,18 +164,18 @@ unsafe fn main_0() -> i32 {
164164
);
165165
let mut i: i32 = 0;
166166
'loop_: while ((i) < (N)) {
167-
reals.as_mut().unwrap()[(i as usize) as usize] =
168-
(b.as_mut().unwrap()[(i as usize) as usize].re.round() as i32);
169-
imgs.as_mut().unwrap()[(i as usize) as usize] =
170-
(b.as_mut().unwrap()[(i as usize) as usize].img.round() as i32);
167+
reals.as_mut().unwrap()[(i as usize)] =
168+
(b.as_mut().unwrap()[(i as usize)].re.round() as i32);
169+
imgs.as_mut().unwrap()[(i as usize)] =
170+
(b.as_mut().unwrap()[(i as usize)].img.round() as i32);
171171
i.prefix_inc();
172172
}
173-
return (((((((reals.as_mut().unwrap()[(0_usize) as usize]) == (10))
174-
&& ((imgs.as_mut().unwrap()[(0_usize) as usize]) == (0)))
175-
&& (((reals.as_mut().unwrap()[(1_usize) as usize]) == (-2_i32))
176-
&& ((imgs.as_mut().unwrap()[(1_usize) as usize]) == (2))))
177-
&& (((reals.as_mut().unwrap()[(2_usize) as usize]) == (-2_i32))
178-
&& ((imgs.as_mut().unwrap()[(2_usize) as usize]) == (0))))
179-
&& (((reals.as_mut().unwrap()[(3_usize) as usize]) == (-2_i32))
180-
&& ((imgs.as_mut().unwrap()[(3_usize) as usize]) == (-2_i32)))) as i32);
173+
return (((((((reals.as_mut().unwrap()[(0_usize)]) == (10))
174+
&& ((imgs.as_mut().unwrap()[(0_usize)]) == (0)))
175+
&& (((reals.as_mut().unwrap()[(1_usize)]) == (-2_i32))
176+
&& ((imgs.as_mut().unwrap()[(1_usize)]) == (2))))
177+
&& (((reals.as_mut().unwrap()[(2_usize)]) == (-2_i32))
178+
&& ((imgs.as_mut().unwrap()[(2_usize)]) == (0))))
179+
&& (((reals.as_mut().unwrap()[(3_usize)]) == (-2_i32))
180+
&& ((imgs.as_mut().unwrap()[(3_usize)]) == (-2_i32)))) as i32);
181181
}

tests/unit/out/unsafe/fn_ptr_stable_sort.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ unsafe fn main_0() -> i32 {
3737
}
3838
})
3939
};
40-
assert!(((v[(0_usize) as usize].key) == (1)));
41-
assert!(((v[(1_usize) as usize].key) == (2)));
42-
assert!(((v[(2_usize) as usize].key) == (3)));
40+
assert!(((v[(0_usize)].key) == (1)));
41+
assert!(((v[(1_usize)].key) == (2)));
42+
assert!(((v[(2_usize)].key) == (3)));
4343
return 0;
4444
}

tests/unit/out/unsafe/foreach_mut.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ unsafe fn main_0() -> i32 {
3434
sum += (*x);
3535
}
3636
let mut v2: Vec<*mut i32> = Vec::new();
37-
v2.push((&mut v1[(0_usize) as usize] as *mut i32));
38-
v2.push((&mut v1[(1_usize) as usize] as *mut i32));
39-
v2.push((&mut v1[(2_usize) as usize] as *mut i32));
37+
v2.push((&mut v1[(0_usize)] as *mut i32));
38+
v2.push((&mut v1[(1_usize)] as *mut i32));
39+
v2.push((&mut v1[(2_usize)] as *mut i32));
4040
'loop_: for p in 0..(v2.len()) {
4141
let mut p = v2[p].clone();
4242
(*p) += 5;

0 commit comments

Comments
 (0)