Skip to content

Commit f174541

Browse files
authored
Skip cast when reference coerces to pointer (#368)
1 parent a12bd34 commit f174541

75 files changed

Lines changed: 383 additions & 435 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎cpp2rust/converter/converter.cpp‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4003,10 +4003,6 @@ void Converter::ConvertVarInit(clang::QualType qual_type, clang::Expr *expr) {
40034003
PushInitType init_type(*this, qual_type);
40044004
Convert(expr, qual_type);
40054005
}
4006-
if (qual_type->isReferenceType() && !IsReferenceType(expr)) {
4007-
StrCat(keyword::kAs);
4008-
Convert(qual_type);
4009-
}
40104006
}
40114007

40124008
void Converter::ConvertUnsignedArithOperand(clang::Expr *expr,

‎tests/ub/out/unsafe/dangling-prvalue-as-lvalue.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub fn main() {
1616
}
1717
unsafe fn main_0() -> i32 {
1818
let mut v: Vec<i32> = vec![1, 2];
19-
let b: *const i32 = (unsafe { foo_0(&(*v.as_mut_ptr()) as *const i32) });
19+
let b: *const i32 = (unsafe { foo_0(&(*v.as_mut_ptr())) });
2020
v.clear();
2121
return (*b);
2222
}

‎tests/ub/out/unsafe/ub1.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::rc::Rc;
99
pub unsafe fn dangling_0() -> *mut i32 {
1010
let mut x: i32 = 1;
1111
let mut p: *mut i32 = (&mut x as *mut i32);
12-
return &mut (*p) as *mut i32;
12+
return &mut (*p);
1313
}
1414
pub fn main() {
1515
unsafe {

‎tests/ub/out/unsafe/ub4.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ unsafe fn main_0() -> i32 {
1919
let mut x1: i32 = 1;
2020
if (x1 != 0) {
2121
let mut x2: i32 = -1_i32;
22-
out = (unsafe { smaller_0(&mut x1 as *mut i32, &mut x2 as *mut i32) });
22+
out = (unsafe { smaller_0(&mut x1, &mut x2) });
2323
}
2424
return (*out);
2525
}

‎tests/ub/out/unsafe/ub5.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ unsafe fn main_0() -> i32 {
1818
let mut x: i32 = 1;
1919
let mut p: *mut i32 = (&mut x as *mut i32);
2020
(unsafe { null_0((&mut p as *mut *mut i32)) });
21-
let r: *mut i32 = &mut (*p) as *mut i32;
21+
let r: *mut i32 = &mut (*p);
2222
return (*r);
2323
}

‎tests/ub/out/unsafe/ub6.rs‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pub unsafe fn fill_1(arr: *mut Option<Box<[*mut i32]>>, n1: *mut i32) {
1919
let mut n2: i32 = (*n1);
2020
let mut pair: Pair = (unsafe {
2121
let _x1: *mut i32 = n1;
22-
let _x2: *mut i32 = &mut n2 as *mut i32;
22+
let _x2: *mut i32 = &mut n2;
2323
mkPair_0(_x1, _x2)
2424
});
2525
(*arr).as_mut().unwrap()[(0_usize)] = (pair.x1);
@@ -46,7 +46,6 @@ unsafe fn main_0() -> i32 {
4646
.map(|_| <*mut i32>::default())
4747
.collect::<Box<[_]>>(),
4848
);
49-
(unsafe { fill_1(&mut arr as *mut Option<Box<[*mut i32]>>, &mut n as *mut i32) });
50-
return ((unsafe { any_2(&mut arr as *mut Option<Box<[*mut i32]>>, &mut n as *mut i32) })
51-
as i32);
49+
(unsafe { fill_1(&mut arr, &mut n) });
50+
return ((unsafe { any_2(&mut arr, &mut n) }) as i32);
5251
}

‎tests/unit/out/unsafe/04_address_taken_array.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ unsafe fn main_0() -> i32 {
1818
let mut arr2_ptr: *mut i32 = arr2.as_mut_ptr();
1919
(*arr2_ptr.offset((0) as isize)) = 5;
2020
(*arr2_ptr.offset((1) as isize)) = 6;
21-
let arr2_ref1: *mut i32 = &mut arr2[(1) as usize] as *mut i32;
21+
let arr2_ref1: *mut i32 = &mut arr2[(1) as usize];
2222
(*arr2_ref1) = 7;
2323
assert!((((arr2[(0) as usize]) + (arr2[(1) as usize])) == (12)));
2424
return 0;

‎tests/unit/out/unsafe/09_references.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ pub fn main() {
1313
}
1414
unsafe fn main_0() -> i32 {
1515
let mut h: i32 = 15;
16-
let h_ref1: *mut i32 = &mut h as *mut i32;
16+
let h_ref1: *mut i32 = &mut h;
1717
(*h_ref1) = 16;
1818
let mut h_ptr: *mut i32 = (h_ref1);
19-
let h_ref2: *mut i32 = &mut (*h_ptr) as *mut i32;
19+
let h_ref2: *mut i32 = &mut (*h_ptr);
2020
(*h_ref2) = 17;
2121
assert!((((*h_ref1) + (*h_ref2)) == (34)));
2222
return 0;

‎tests/unit/out/unsafe/11_move.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub fn main() {
2222
}
2323
unsafe fn main_0() -> i32 {
2424
let mut n: Option<Box<i32>> = Some(Box::new(10));
25-
(unsafe { change_0(&mut n as *mut Option<Box<i32>>) });
25+
(unsafe { change_0(&mut n) });
2626
assert!(((*n.as_deref_mut().unwrap()) == (20)));
2727
return 0;
2828
}

‎tests/unit/out/unsafe/13_testing.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn main() {
1313
}
1414
unsafe fn main_0() -> i32 {
1515
let mut a: i32 = 1;
16-
let r: *mut i32 = &mut a as *mut i32;
16+
let r: *mut i32 = &mut a;
1717
let mut p: *mut i32 = (&mut a as *mut i32);
1818
(*r) = 2;
1919
(*p) = 3;

0 commit comments

Comments
 (0)