From 46eca715c5e1a37ae81a192b4676e0433a721131 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Sun, 9 Oct 2022 22:09:23 -0700 Subject: [PATCH] Replaced `0 as *{const,mut} _` with `std::ptr::null{,_mut}()` for strict provenance. --- analysis/test/src/pointers.rs | 12 ++-- ...sts__analysis_test_pdg_snapshot_debug.snap | 60 ++++++++++--------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/analysis/test/src/pointers.rs b/analysis/test/src/pointers.rs index fe0b88374f..85d66299d1 100644 --- a/analysis/test/src/pointers.rs +++ b/analysis/test/src/pointers.rs @@ -75,7 +75,7 @@ pub struct S { pub field4: T, } #[no_mangle] -pub static mut global: *mut S = 0 as *const S as *mut S; +pub static mut global: *mut S = std::ptr::null_mut(); #[no_mangle] pub unsafe extern "C" fn malloc_wrapper(mut size: size_t) -> *mut libc::c_void { return malloc(size); @@ -105,7 +105,7 @@ pub unsafe extern "C" fn simple() { (*y).field4 = T { field: 0i32, field2: 0u64, - field3: 0 as *const S, + field3: std::ptr::null(), field4: 0i32, }; let s = *y; @@ -232,7 +232,7 @@ pub unsafe extern "C" fn fdevent_unregister(mut ev: *mut fdevents, mut fd: libc: return; } let ref mut fresh1 = *((*ev).fdarray).offset(fd as isize); - *fresh1 = 0 as *mut fdnode; + *fresh1 = std::ptr::null_mut(); fdnode_free(fdn); } unsafe extern "C" fn fdnode_free(mut fdn: *mut fdnode) { @@ -345,7 +345,7 @@ pub unsafe extern "C" fn invalid() { b"%i\n\x00" as *const u8 as *const libc::c_char, (*global).field, ); - global = 0 as *mut S; + global = std::ptr::null_mut(); free(s as *mut libc::c_void); } pub unsafe extern "C" fn testing() { @@ -416,14 +416,14 @@ pub unsafe extern "C" fn test_ref_field() { let t = T { field: 0i32, field2: 0u64, - field3: 0 as *const S, + field3: std::ptr::null(), field4: 0i32, }; let ref mut s = S { field: 0i32, field2: 0u64, - field3: 0 as *const S, + field3: std::ptr::null(), field4: t, }; s.field4.field4 = s.field4.field4; diff --git a/pdg/src/snapshots/c2rust_pdg__tests__analysis_test_pdg_snapshot_debug.snap b/pdg/src/snapshots/c2rust_pdg__tests__analysis_test_pdg_snapshot_debug.snap index 7cb168250f..bdae795391 100644 --- a/pdg/src/snapshots/c2rust_pdg__tests__analysis_test_pdg_snapshot_debug.snap +++ b/pdg/src/snapshots/c2rust_pdg__tests__analysis_test_pdg_snapshot_debug.snap @@ -18,11 +18,13 @@ nodes_that_need_write = [] g { n[0]: copy _ => _14 @ bb6[4]: fn main; _14 = null_mut(); n[1]: copy n[0] => _1 @ bb0[0]: fn once; _13 = once(move _14); - n[2]: int_to_ptr _ => _17 @ bb4[29]: fn simple; _17 = const 0_usize as *const pointers::S (PointerFromExposedAddress); - n[3]: value.store _ => _20.* @ bb4[7]: fn invalid; (*_20) = const 0_usize as *mut pointers::S (PointerFromExposedAddress); - n[4]: value.store _ => _17.* @ bb8[4]: fn fdevent_unregister; (*_17) = const 0_usize as *mut pointers::fdnode_st (PointerFromExposedAddress); - n[5]: int_to_ptr _ => _2 @ bb0[2]: fn test_ref_field; _2 = const 0_usize as *const pointers::S (PointerFromExposedAddress); - n[6]: int_to_ptr _ => _5 @ bb0[8]: fn test_ref_field; _5 = const 0_usize as *const pointers::S (PointerFromExposedAddress); + n[2]: copy _ => _17 @ bb4[29]: fn simple; _17 = null(); + n[3]: copy _ => _20 @ bb4[6]: fn invalid; _20 = null_mut(); + n[4]: value.store n[3] => _21.* @ bb5[2]: fn invalid; (*_21) = move _20; + n[5]: copy _ => _22 @ bb8[5]: fn fdevent_unregister; _22 = null_mut(); + n[6]: value.store n[5] => _17.* @ bb9[0]: fn fdevent_unregister; (*_17) = move _22; + n[7]: copy _ => _2 @ bb0[2]: fn test_ref_field; _2 = null(); + n[8]: copy _ => _5 @ bb1[5]: fn test_ref_field; _5 = null(); } nodes_that_need_write = [] @@ -48,9 +50,9 @@ g { n[1]: copy n[0] => _1 @ bb2[1]: fn simple; _1 = move _2 as *mut pointers::S (Misc); n[2]: copy n[1] => _5 @ bb2[5]: fn simple; _5 = _1; n[3]: field.0 n[1] => _10 @ bb4[5]: fn simple; _10 = &raw const ((*_1).0: i32); - n[4]: copy n[2] => _24 @ bb5[5]: fn simple; _24 = _5; - n[5]: copy n[4] => _23 @ bb5[6]: fn simple; _23 = move _24 as *mut libc::c_void (Misc); - n[6]: free n[5] => _22 @ bb5[8]: fn simple; _22 = free(move _23); + n[4]: copy n[2] => _24 @ bb6[5]: fn simple; _24 = _5; + n[5]: copy n[4] => _23 @ bb6[6]: fn simple; _23 = move _24 as *mut libc::c_void (Misc); + n[6]: free n[5] => _22 @ bb6[8]: fn simple; _22 = free(move _23); } nodes_that_need_write = [] @@ -74,11 +76,11 @@ g { n[16]: field.2 n[3] => _ @ bb4[25]: fn simple; ((*_1).2: *const pointers::S) = move _15; n[17]: addr.store n[16] => _ @ bb4[25]: fn simple; ((*_1).2: *const pointers::S) = move _15; n[18]: value.store n[15] => _1.*.2 @ bb4[25]: fn simple; ((*_1).2: *const pointers::S) = move _15; - n[19]: field.3 n[1] => _ @ bb4[32]: fn simple; ((*_6).3: pointers::T) = move _16; - n[20]: addr.store n[19] => _ @ bb4[32]: fn simple; ((*_6).3: pointers::T) = move _16; - n[21]: addr.load n[1] => _ @ bb4[35]: fn simple; _18 = (*_6); - n[22]: addr.store n[3] => _ @ bb4[39]: fn simple; (*_1) = move _19; - n[23]: copy n[3] => _21 @ bb4[43]: fn simple; _21 = _1; + n[19]: field.3 n[1] => _ @ bb5[2]: fn simple; ((*_6).3: pointers::T) = move _16; + n[20]: addr.store n[19] => _ @ bb5[2]: fn simple; ((*_6).3: pointers::T) = move _16; + n[21]: addr.load n[1] => _ @ bb5[5]: fn simple; _18 = (*_6); + n[22]: addr.store n[3] => _ @ bb5[9]: fn simple; (*_1) = move _19; + n[23]: copy n[3] => _21 @ bb5[13]: fn simple; _21 = _1; n[24]: copy n[23] => _2 @ bb0[0]: fn recur; _20 = recur(const 3_i32, move _21); n[25]: copy n[24] => _13 @ bb8[3]: fn recur; _13 = _2; n[26]: copy n[25] => _2 @ bb0[0]: fn recur; _9 = recur(move _10, move _13); @@ -363,8 +365,8 @@ g { n[10]: copy _ => _19 @ bb3[17]: fn invalid; _19 = const {alloc8: *mut *mut pointers::S}; n[11]: field.0 n[10] => _18 @ bb3[18]: fn invalid; _18 = ((*(*_19)).0: i32); n[12]: addr.load n[11] => _ @ bb3[18]: fn invalid; _18 = ((*(*_19)).0: i32); - n[13]: copy _ => _20 @ bb4[6]: fn invalid; _20 = const {alloc8: *mut *mut pointers::S}; - n[14]: addr.store n[13] => _ @ bb4[7]: fn invalid; (*_20) = const 0_usize as *mut pointers::S (PointerFromExposedAddress); + n[13]: copy _ => _21 @ bb5[1]: fn invalid; _21 = const {alloc8: *mut *mut pointers::S}; + n[14]: addr.store n[13] => _ @ bb5[2]: fn invalid; (*_21) = move _20; } nodes_that_need_write = [14, 13, 9, 8, 5, 4, 1, 0] @@ -386,9 +388,9 @@ g { n[5]: value.store n[4] => _6.* @ bb2[10]: fn invalid; (*_6) = move _5; n[6]: field.0 n[1] => _12 @ bb2[25]: fn invalid; _12 = ((*_1).0: i32); n[7]: addr.load n[6] => _ @ bb2[25]: fn invalid; _12 = ((*_1).0: i32); - n[8]: copy n[1] => _23 @ bb4[12]: fn invalid; _23 = _1; - n[9]: copy n[8] => _22 @ bb4[13]: fn invalid; _22 = move _23 as *mut libc::c_void (Misc); - n[10]: free n[9] => _21 @ bb4[15]: fn invalid; _21 = free(move _22); + n[8]: copy n[1] => _24 @ bb5[8]: fn invalid; _24 = _1; + n[9]: copy n[8] => _23 @ bb5[9]: fn invalid; _23 = move _24 as *mut libc::c_void (Misc); + n[10]: free n[9] => _22 @ bb5[11]: fn invalid; _22 = free(move _23); } nodes_that_need_write = [3, 2, 1, 0] @@ -458,7 +460,7 @@ g { n[12]: value.load _ => _19 @ bb7[4]: fn fdevent_unregister; _19 = ((*_1).0: *mut *mut pointers::fdnode_st); n[13]: offset[0] n[12] => _18 @ bb7[10]: fn fdevent_unregister; _18 = offset(move _19, move _20); n[14]: copy n[13] => _17 @ bb8[3]: fn fdevent_unregister; _17 = &mut (*_18); - n[15]: addr.store n[14] => _ @ bb8[4]: fn fdevent_unregister; (*_17) = const 0_usize as *mut pointers::fdnode_st (PointerFromExposedAddress); + n[15]: addr.store n[14] => _ @ bb9[0]: fn fdevent_unregister; (*_17) = move _22; n[16]: copy n[1] => _20 @ bb6[6]: fn lighttpd_test; _20 = _1; n[17]: copy n[16] => _19 @ bb6[7]: fn lighttpd_test; _19 = move _20 as *mut libc::c_void (Misc); n[18]: free n[17] => _18 @ bb6[9]: fn lighttpd_test; _18 = free(move _19); @@ -567,8 +569,8 @@ g { n[29]: value.load _ => _3 @ bb1[2]: fn fdevent_unregister; _3 = (*_4); n[30]: copy n[29] => _12 @ bb1[11]: fn fdevent_unregister; _12 = _3; n[31]: ptr_to_int n[30] => _ @ bb1[12]: fn fdevent_unregister; _11 = move _12 as usize (PointerExposeAddress); - n[32]: copy n[29] => _23 @ bb8[7]: fn fdevent_unregister; _23 = _3; - n[33]: copy n[32] => _1 @ bb0[0]: fn fdnode_free; _22 = fdnode_free(move _23); + n[32]: copy n[29] => _24 @ bb9[4]: fn fdevent_unregister; _24 = _3; + n[33]: copy n[32] => _1 @ bb0[0]: fn fdnode_free; _23 = fdnode_free(move _24); n[34]: copy n[33] => _4 @ bb0[3]: fn fdnode_free; _4 = _1; n[35]: copy n[34] => _3 @ bb0[4]: fn fdnode_free; _3 = move _4 as *mut libc::c_void (Misc); n[36]: free n[35] => _2 @ bb0[6]: fn fdnode_free; _2 = free(move _3); @@ -942,16 +944,16 @@ g { 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] g { - n[0]: &_4 _ => _3 @ bb0[15]: fn test_ref_field; _3 = &mut _4; - n[1]: field.3 n[0] => _ @ bb0[17]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32); - n[2]: field.3 n[1] => _7 @ bb0[17]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32); - n[3]: addr.load n[2] => _ @ bb0[17]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32); - n[4]: field.3 n[0] => _ @ bb0[18]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7; - n[5]: field.3 n[4] => _ @ bb0[18]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7; - n[6]: addr.store n[5] => _ @ bb0[18]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7; + n[0]: &_4 _ => _3 @ bb2[6]: fn test_ref_field; _3 = &mut _4; + n[1]: field.3 n[0] => _ @ bb2[8]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32); + n[2]: field.3 n[1] => _7 @ bb2[8]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32); + n[3]: addr.load n[2] => _ @ bb2[8]: fn test_ref_field; _7 = (((*_3).3: pointers::T).3: i32); + n[4]: field.3 n[0] => _ @ bb2[9]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7; + n[5]: field.3 n[4] => _ @ bb2[9]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7; + n[6]: addr.store n[5] => _ @ bb2[9]: fn test_ref_field; (((*_3).3: pointers::T).3: i32) = move _7; } nodes_that_need_write = [6, 5, 4, 0] num_graphs = 64 -num_nodes = 694 +num_nodes = 696