std: Unsafe-wrap alloc code held in-common · model-checking/verify-rust-std@155aef9 (original) (raw)

``

1

`+

#![forbid(unsafe_op_in_unsafe_fn)]

`

1

2

`use crate::alloc::{GlobalAlloc, Layout, System};

`

2

3

`use crate::cmp;

`

3

4

`use crate::ptr;

`

`@@ -46,14 +47,16 @@ pub unsafe fn realloc_fallback(

`

46

47

`old_layout: Layout,

`

47

48

`new_size: usize,

`

48

49

`) -> *mut u8 {

`

49

``

`-

// Docs for GlobalAlloc::realloc require this to be valid:

`

50

``

`-

let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());

`

``

50

`+

// SAFETY: Docs for GlobalAlloc::realloc require this to be valid

`

``

51

`+

unsafe {

`

``

52

`+

let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());

`

51

53

``

52

``

`-

let new_ptr = GlobalAlloc::alloc(alloc, new_layout);

`

53

``

`-

if !new_ptr.is_null() {

`

54

``

`-

let size = cmp::min(old_layout.size(), new_size);

`

55

``

`-

ptr::copy_nonoverlapping(ptr, new_ptr, size);

`

56

``

`-

GlobalAlloc::dealloc(alloc, ptr, old_layout);

`

``

54

`+

let new_ptr = GlobalAlloc::alloc(alloc, new_layout);

`

``

55

`+

if !new_ptr.is_null() {

`

``

56

`+

let size = cmp::min(old_layout.size(), new_size);

`

``

57

`+

ptr::copy_nonoverlapping(ptr, new_ptr, size);

`

``

58

`+

GlobalAlloc::dealloc(alloc, ptr, old_layout);

`

``

59

`+

}

`

``

60

`+

new_ptr

`

57

61

`}

`

58

``

`-

new_ptr

`

59

62

`}

`