Skip to content

Commit 46eca71

Browse files
committed
Replaced 0 as *{const,mut} _ with std::ptr::null{,_mut}() for strict provenance.
1 parent e657818 commit 46eca71

File tree

2 files changed

+37
-35
lines changed

2 files changed

+37
-35
lines changed

analysis/test/src/pointers.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ pub struct S {
7575
pub field4: T,
7676
}
7777
#[no_mangle]
78-
pub static mut global: *mut S = 0 as *const S as *mut S;
78+
pub static mut global: *mut S = std::ptr::null_mut();
7979
#[no_mangle]
8080
pub unsafe extern "C" fn malloc_wrapper(mut size: size_t) -> *mut libc::c_void {
8181
return malloc(size);
@@ -105,7 +105,7 @@ pub unsafe extern "C" fn simple() {
105105
(*y).field4 = T {
106106
field: 0i32,
107107
field2: 0u64,
108-
field3: 0 as *const S,
108+
field3: std::ptr::null(),
109109
field4: 0i32,
110110
};
111111
let s = *y;
@@ -232,7 +232,7 @@ pub unsafe extern "C" fn fdevent_unregister(mut ev: *mut fdevents, mut fd: libc:
232232
return;
233233
}
234234
let ref mut fresh1 = *((*ev).fdarray).offset(fd as isize);
235-
*fresh1 = 0 as *mut fdnode;
235+
*fresh1 = std::ptr::null_mut();
236236
fdnode_free(fdn);
237237
}
238238
unsafe extern "C" fn fdnode_free(mut fdn: *mut fdnode) {
@@ -345,7 +345,7 @@ pub unsafe extern "C" fn invalid() {
345345
b"%i\n\x00" as *const u8 as *const libc::c_char,
346346
(*global).field,
347347
);
348-
global = 0 as *mut S;
348+
global = std::ptr::null_mut();
349349
free(s as *mut libc::c_void);
350350
}
351351
pub unsafe extern "C" fn testing() {
@@ -416,14 +416,14 @@ pub unsafe extern "C" fn test_ref_field() {
416416
let t = T {
417417
field: 0i32,
418418
field2: 0u64,
419-
field3: 0 as *const S,
419+
field3: std::ptr::null(),
420420
field4: 0i32,
421421
};
422422

423423
let ref mut s = S {
424424
field: 0i32,
425425
field2: 0u64,
426-
field3: 0 as *const S,
426+
field3: std::ptr::null(),
427427
field4: t,
428428
};
429429
s.field4.field4 = s.field4.field4;

pdg/src/snapshots/c2rust_pdg__tests__analysis_test_pdg_snapshot_debug.snap

+31-29
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ nodes_that_need_write = []
1818
g {
1919
n[0]: copy _ => _14 @ bb6[4]: fn main; _14 = null_mut();
2020
n[1]: copy n[0] => _1 @ bb0[0]: fn once; _13 = once(move _14);
21-
n[2]: int_to_ptr _ => _17 @ bb4[29]: fn simple; _17 = const 0_usize as *const pointers::S (PointerFromExposedAddress);
22-
n[3]: value.store _ => _20.* @ bb4[7]: fn invalid; (*_20) = const 0_usize as *mut pointers::S (PointerFromExposedAddress);
23-
n[4]: value.store _ => _17.* @ bb8[4]: fn fdevent_unregister; (*_17) = const 0_usize as *mut pointers::fdnode_st (PointerFromExposedAddress);
24-
n[5]: int_to_ptr _ => _2 @ bb0[2]: fn test_ref_field; _2 = const 0_usize as *const pointers::S (PointerFromExposedAddress);
25-
n[6]: int_to_ptr _ => _5 @ bb0[8]: fn test_ref_field; _5 = const 0_usize as *const pointers::S (PointerFromExposedAddress);
21+
n[2]: copy _ => _17 @ bb4[29]: fn simple; _17 = null();
22+
n[3]: copy _ => _20 @ bb4[6]: fn invalid; _20 = null_mut();
23+
n[4]: value.store n[3] => _21.* @ bb5[2]: fn invalid; (*_21) = move _20;
24+
n[5]: copy _ => _22 @ bb8[5]: fn fdevent_unregister; _22 = null_mut();
25+
n[6]: value.store n[5] => _17.* @ bb9[0]: fn fdevent_unregister; (*_17) = move _22;
26+
n[7]: copy _ => _2 @ bb0[2]: fn test_ref_field; _2 = null();
27+
n[8]: copy _ => _5 @ bb1[5]: fn test_ref_field; _5 = null();
2628
}
2729
nodes_that_need_write = []
2830

@@ -48,9 +50,9 @@ g {
4850
n[1]: copy n[0] => _1 @ bb2[1]: fn simple; _1 = move _2 as *mut pointers::S (Misc);
4951
n[2]: copy n[1] => _5 @ bb2[5]: fn simple; _5 = _1;
5052
n[3]: field.0 n[1] => _10 @ bb4[5]: fn simple; _10 = &raw const ((*_1).0: i32);
51-
n[4]: copy n[2] => _24 @ bb5[5]: fn simple; _24 = _5;
52-
n[5]: copy n[4] => _23 @ bb5[6]: fn simple; _23 = move _24 as *mut libc::c_void (Misc);
53-
n[6]: free n[5] => _22 @ bb5[8]: fn simple; _22 = free(move _23);
53+
n[4]: copy n[2] => _24 @ bb6[5]: fn simple; _24 = _5;
54+
n[5]: copy n[4] => _23 @ bb6[6]: fn simple; _23 = move _24 as *mut libc::c_void (Misc);
55+
n[6]: free n[5] => _22 @ bb6[8]: fn simple; _22 = free(move _23);
5456
}
5557
nodes_that_need_write = []
5658

@@ -74,11 +76,11 @@ g {
7476
n[16]: field.2 n[3] => _ @ bb4[25]: fn simple; ((*_1).2: *const pointers::S) = move _15;
7577
n[17]: addr.store n[16] => _ @ bb4[25]: fn simple; ((*_1).2: *const pointers::S) = move _15;
7678
n[18]: value.store n[15] => _1.*.2 @ bb4[25]: fn simple; ((*_1).2: *const pointers::S) = move _15;
77-
n[19]: field.3 n[1] => _ @ bb4[32]: fn simple; ((*_6).3: pointers::T) = move _16;
78-
n[20]: addr.store n[19] => _ @ bb4[32]: fn simple; ((*_6).3: pointers::T) = move _16;
79-
n[21]: addr.load n[1] => _ @ bb4[35]: fn simple; _18 = (*_6);
80-
n[22]: addr.store n[3] => _ @ bb4[39]: fn simple; (*_1) = move _19;
81-
n[23]: copy n[3] => _21 @ bb4[43]: fn simple; _21 = _1;
79+
n[19]: field.3 n[1] => _ @ bb5[2]: fn simple; ((*_6).3: pointers::T) = move _16;
80+
n[20]: addr.store n[19] => _ @ bb5[2]: fn simple; ((*_6).3: pointers::T) = move _16;
81+
n[21]: addr.load n[1] => _ @ bb5[5]: fn simple; _18 = (*_6);
82+
n[22]: addr.store n[3] => _ @ bb5[9]: fn simple; (*_1) = move _19;
83+
n[23]: copy n[3] => _21 @ bb5[13]: fn simple; _21 = _1;
8284
n[24]: copy n[23] => _2 @ bb0[0]: fn recur; _20 = recur(const 3_i32, move _21);
8385
n[25]: copy n[24] => _13 @ bb8[3]: fn recur; _13 = _2;
8486
n[26]: copy n[25] => _2 @ bb0[0]: fn recur; _9 = recur(move _10, move _13);
@@ -363,8 +365,8 @@ g {
363365
n[10]: copy _ => _19 @ bb3[17]: fn invalid; _19 = const {alloc8: *mut *mut pointers::S};
364366
n[11]: field.0 n[10] => _18 @ bb3[18]: fn invalid; _18 = ((*(*_19)).0: i32);
365367
n[12]: addr.load n[11] => _ @ bb3[18]: fn invalid; _18 = ((*(*_19)).0: i32);
366-
n[13]: copy _ => _20 @ bb4[6]: fn invalid; _20 = const {alloc8: *mut *mut pointers::S};
367-
n[14]: addr.store n[13] => _ @ bb4[7]: fn invalid; (*_20) = const 0_usize as *mut pointers::S (PointerFromExposedAddress);
368+
n[13]: copy _ => _21 @ bb5[1]: fn invalid; _21 = const {alloc8: *mut *mut pointers::S};
369+
n[14]: addr.store n[13] => _ @ bb5[2]: fn invalid; (*_21) = move _20;
368370
}
369371
nodes_that_need_write = [14, 13, 9, 8, 5, 4, 1, 0]
370372

@@ -386,9 +388,9 @@ g {
386388
n[5]: value.store n[4] => _6.* @ bb2[10]: fn invalid; (*_6) = move _5;
387389
n[6]: field.0 n[1] => _12 @ bb2[25]: fn invalid; _12 = ((*_1).0: i32);
388390
n[7]: addr.load n[6] => _ @ bb2[25]: fn invalid; _12 = ((*_1).0: i32);
389-
n[8]: copy n[1] => _23 @ bb4[12]: fn invalid; _23 = _1;
390-
n[9]: copy n[8] => _22 @ bb4[13]: fn invalid; _22 = move _23 as *mut libc::c_void (Misc);
391-
n[10]: free n[9] => _21 @ bb4[15]: fn invalid; _21 = free(move _22);
391+
n[8]: copy n[1] => _24 @ bb5[8]: fn invalid; _24 = _1;
392+
n[9]: copy n[8] => _23 @ bb5[9]: fn invalid; _23 = move _24 as *mut libc::c_void (Misc);
393+
n[10]: free n[9] => _22 @ bb5[11]: fn invalid; _22 = free(move _23);
392394
}
393395
nodes_that_need_write = [3, 2, 1, 0]
394396

@@ -458,7 +460,7 @@ g {
458460
n[12]: value.load _ => _19 @ bb7[4]: fn fdevent_unregister; _19 = ((*_1).0: *mut *mut pointers::fdnode_st);
459461
n[13]: offset[0] n[12] => _18 @ bb7[10]: fn fdevent_unregister; _18 = offset(move _19, move _20);
460462
n[14]: copy n[13] => _17 @ bb8[3]: fn fdevent_unregister; _17 = &mut (*_18);
461-
n[15]: addr.store n[14] => _ @ bb8[4]: fn fdevent_unregister; (*_17) = const 0_usize as *mut pointers::fdnode_st (PointerFromExposedAddress);
463+
n[15]: addr.store n[14] => _ @ bb9[0]: fn fdevent_unregister; (*_17) = move _22;
462464
n[16]: copy n[1] => _20 @ bb6[6]: fn lighttpd_test; _20 = _1;
463465
n[17]: copy n[16] => _19 @ bb6[7]: fn lighttpd_test; _19 = move _20 as *mut libc::c_void (Misc);
464466
n[18]: free n[17] => _18 @ bb6[9]: fn lighttpd_test; _18 = free(move _19);
@@ -567,8 +569,8 @@ g {
567569
n[29]: value.load _ => _3 @ bb1[2]: fn fdevent_unregister; _3 = (*_4);
568570
n[30]: copy n[29] => _12 @ bb1[11]: fn fdevent_unregister; _12 = _3;
569571
n[31]: ptr_to_int n[30] => _ @ bb1[12]: fn fdevent_unregister; _11 = move _12 as usize (PointerExposeAddress);
570-
n[32]: copy n[29] => _23 @ bb8[7]: fn fdevent_unregister; _23 = _3;
571-
n[33]: copy n[32] => _1 @ bb0[0]: fn fdnode_free; _22 = fdnode_free(move _23);
572+
n[32]: copy n[29] => _24 @ bb9[4]: fn fdevent_unregister; _24 = _3;
573+
n[33]: copy n[32] => _1 @ bb0[0]: fn fdnode_free; _23 = fdnode_free(move _24);
572574
n[34]: copy n[33] => _4 @ bb0[3]: fn fdnode_free; _4 = _1;
573575
n[35]: copy n[34] => _3 @ bb0[4]: fn fdnode_free; _3 = move _4 as *mut libc::c_void (Misc);
574576
n[36]: free n[35] => _2 @ bb0[6]: fn fdnode_free; _2 = free(move _3);
@@ -942,16 +944,16 @@ g {
942944
nodes_that_need_write = [75, 74, 73, 66, 65, 64, 63, 62, 61, 54, 53, 52, 45, 44, 43, 33, 32, 31, 27, 26, 25, 15, 14, 13, 6, 5, 4, 0]
943945

944946
g {
945-
n[0]: &_4 _ => _3 @ bb0[15]: fn test_ref_field; _3 = &mut _4;
946-
n[1]: field.3 n[0] => _ @ bb0[17]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32);
947-
n[2]: field.3 n[1] => _7 @ bb0[17]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32);
948-
n[3]: addr.load n[2] => _ @ bb0[17]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32);
949-
n[4]: field.3 n[0] => _ @ bb0[18]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7;
950-
n[5]: field.3 n[4] => _ @ bb0[18]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7;
951-
n[6]: addr.store n[5] => _ @ bb0[18]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7;
947+
n[0]: &_4 _ => _3 @ bb2[6]: fn test_ref_field; _3 = &mut _4;
948+
n[1]: field.3 n[0] => _ @ bb2[8]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32);
949+
n[2]: field.3 n[1] => _7 @ bb2[8]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32);
950+
n[3]: addr.load n[2] => _ @ bb2[8]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32);
951+
n[4]: field.3 n[0] => _ @ bb2[9]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7;
952+
n[5]: field.3 n[4] => _ @ bb2[9]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7;
953+
n[6]: addr.store n[5] => _ @ bb2[9]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7;
952954
}
953955
nodes_that_need_write = [6, 5, 4, 0]
954956

955957
num_graphs = 64
956-
num_nodes = 694
958+
num_nodes = 696
957959

0 commit comments

Comments
 (0)