Skip to content

Commit de87ddf

Browse files
committed
use addr_of!
1 parent 0249531 commit de87ddf

File tree

9 files changed

+19
-14
lines changed

9 files changed

+19
-14
lines changed

crates/line-tables-only/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ mod tests {
33
use backtrace::Backtrace;
44
use libc::c_void;
55
use std::path::Path;
6+
use std::ptr::addr_of_mut;
67

78
pub type Callback = extern "C" fn(data: *mut c_void);
89

@@ -49,7 +50,7 @@ mod tests {
4950
#[cfg_attr(windows, ignore)]
5051
fn backtrace_works_with_line_tables_only() {
5152
let mut backtrace: Option<Backtrace> = None;
52-
unsafe { foo(store_backtrace, &mut backtrace as *mut _ as *mut c_void) };
53+
unsafe { foo(store_backtrace, addr_of_mut!(backtrace) as *mut c_void) };
5354
let backtrace = backtrace.expect("backtrace");
5455
assert_contains(&backtrace, "foo", "src/callback.c", 13);
5556
assert_contains(&backtrace, "bar", "src/callback.c", 9);

src/backtrace/dbghelp.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
162162
context.ip(),
163163
fn_entry,
164164
&mut context.0,
165-
&mut handler_data as *mut usize as *mut PVOID,
165+
ptr::addr_of_mut!(handler_data) as *mut PVOID,
166166
&mut establisher_frame,
167167
ptr::null_mut(),
168168
);
@@ -172,7 +172,7 @@ pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
172172
#[cfg(any(target_arch = "x86", target_arch = "arm"))]
173173
#[inline(always)]
174174
pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
175-
use core::mem;
175+
use core::{mem, ptr};
176176

177177
// Allocate necessary structures for doing the stack walk
178178
let process = GetCurrentProcess();
@@ -215,7 +215,7 @@ pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
215215
process,
216216
thread,
217217
&mut stack_frame_ex,
218-
&mut context.0 as *mut CONTEXT as PVOID,
218+
ptr::addr_of_mut!(context.0) as PVOID,
219219
None,
220220
Some(function_table_access),
221221
Some(get_module_base),
@@ -253,7 +253,7 @@ pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
253253
process,
254254
thread,
255255
&mut stack_frame64,
256-
&mut context.0 as *mut CONTEXT as PVOID,
256+
ptr::addr_of_mut!(context.0) as PVOID,
257257
None,
258258
Some(function_table_access),
259259
Some(get_module_base),

src/backtrace/libunwind.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
1818
use super::super::Bomb;
1919
use core::ffi::c_void;
20+
use core::ptr::addr_of_mut;
2021

2122
pub enum Frame {
2223
Raw(*mut uw::_Unwind_Context),
@@ -101,7 +102,7 @@ impl Clone for Frame {
101102

102103
#[inline(always)]
103104
pub unsafe fn trace(mut cb: &mut dyn FnMut(&super::Frame) -> bool) {
104-
uw::_Unwind_Backtrace(trace_fn, &mut cb as *mut _ as *mut _);
105+
uw::_Unwind_Backtrace(trace_fn, addr_of_mut!(cb) as *mut _);
105106

106107
extern "C" fn trace_fn(
107108
ctx: *mut uw::_Unwind_Context,
@@ -198,6 +199,8 @@ mod uw {
198199
_Unwind_GetGR(ctx, 15)
199200
}
200201
} else {
202+
use core::ptr::addr_of_mut;
203+
201204
// On android and arm, the function `_Unwind_GetIP` and a bunch of
202205
// others are macros, so we define functions containing the
203206
// expansion of the macros.
@@ -242,7 +245,7 @@ mod uw {
242245

243246
pub unsafe fn _Unwind_GetIP(ctx: *mut _Unwind_Context) -> libc::uintptr_t {
244247
let mut val: _Unwind_Word = 0;
245-
let ptr = &mut val as *mut _Unwind_Word;
248+
let ptr = addr_of_mut!(val);
246249
let _ = _Unwind_VRS_Get(
247250
ctx,
248251
_Unwind_VRS_RegClass::_UVRSC_CORE,
@@ -258,7 +261,7 @@ mod uw {
258261

259262
pub unsafe fn get_sp(ctx: *mut _Unwind_Context) -> libc::uintptr_t {
260263
let mut val: _Unwind_Word = 0;
261-
let ptr = &mut val as *mut _Unwind_Word;
264+
let ptr = addr_of_mut!(val);
262265
let _ = _Unwind_VRS_Get(
263266
ctx,
264267
_Unwind_VRS_RegClass::_UVRSC_CORE,

src/dbghelp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ macro_rules! dbghelp {
155155

156156
pub fn dbghelp(&self) -> *mut Dbghelp {
157157
unsafe {
158-
&mut DBGHELP
158+
ptr::addr_of_mut!(DBGHELP)
159159
}
160160
}
161161
}

src/symbolize/dbghelp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ unsafe fn do_resolve(
222222
}
223223
}
224224
}
225-
let name = &name_buffer[..name_len] as *const [u8];
225+
let name = core::ptr::addr_of!(name_buffer[..name_len]);
226226

227227
let mut line = mem::zeroed::<IMAGEHLP_LINEW64>();
228228
line.SizeOfStruct = mem::size_of::<IMAGEHLP_LINEW64>() as DWORD;

src/symbolize/gimli/libs_dl_iterate_phdr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use core::slice;
1212
pub(super) fn native_libraries() -> Vec<Library> {
1313
let mut ret = Vec::new();
1414
unsafe {
15-
libc::dl_iterate_phdr(Some(callback), &mut ret as *mut Vec<_> as *mut _);
15+
libc::dl_iterate_phdr(Some(callback), core::ptr::addr_of_mut!(ret) as *mut _);
1616
}
1717
return ret;
1818
}

src/symbolize/gimli/libs_illumos.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub(super) fn native_libraries() -> Vec<Library> {
4141
if dlinfo(
4242
RTLD_SELF,
4343
RTLD_DI_LINKMAP,
44-
(&mut map) as *mut *const LinkMap as *mut libc::c_void,
44+
core::ptr::addr_of_mut!(map) as *mut libc::c_void,
4545
) != 0
4646
{
4747
return libs;

src/symbolize/gimli/libs_libnx.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub(super) fn native_libraries() -> Vec<Library> {
77
static __start__: u8;
88
}
99

10-
let bias = unsafe { &__start__ } as *const u8 as usize;
10+
let bias = core::ptr::addr_of!(__start__) as usize;
1111

1212
let mut ret = Vec::new();
1313
let mut segments = Vec::new();

tests/smoke.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use backtrace::Frame;
2+
use std::ptr;
23
use std::thread;
34

45
fn get_actual_fn_pointer(fp: usize) -> usize {
@@ -264,7 +265,7 @@ fn sp_smoke_test() {
264265
assert!(refs.len() < 5);
265266

266267
let x = refs.len();
267-
refs.push(&x as *const _ as usize);
268+
refs.push(ptr::addr_of!(x) as usize);
268269

269270
if refs.len() < 5 {
270271
recursive_stack_references(refs);

0 commit comments

Comments
 (0)