Skip to content

Commit d3b1315

Browse files
committed
Insert null checks for pointer dereferences when debug assertions are enabled
Similar to how the alignment is already checked, this adds a check for null pointer dereferences in debug mode. It is implemented similarly to the alignment check as a MirPass. This is related to a 2025H1 project goal for better UB checks in debug mode: rust-lang/rust-project-goals#177.
1 parent 24ff8ae commit d3b1315

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

core/src/panicking.rs

+16
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,22 @@ fn panic_misaligned_pointer_dereference(required: usize, found: usize) -> ! {
291291
)
292292
}
293293

294+
#[cfg_attr(not(feature = "panic_immediate_abort"), inline(never), cold, optimize(size))]
295+
#[cfg_attr(feature = "panic_immediate_abort", inline)]
296+
#[track_caller]
297+
#[cfg_attr(not(bootstrap), lang = "panic_null_pointer_dereference")] // needed by codegen for panic on null pointer deref
298+
#[rustc_nounwind] // `CheckNull` MIR pass requires this function to never unwind
299+
fn panic_null_pointer_dereference() -> ! {
300+
if cfg!(feature = "panic_immediate_abort") {
301+
super::intrinsics::abort()
302+
}
303+
304+
panic_nounwind_fmt(
305+
format_args!("null pointer dereference occured"),
306+
/* force_no_backtrace */ false,
307+
)
308+
}
309+
294310
/// Panics because we cannot unwind out of a function.
295311
///
296312
/// This is a separate function to avoid the codesize impact of each crate containing the string to

0 commit comments

Comments
 (0)