Auto merge of #134424 - 1c3t3a:null-checks, r=saethlin
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 inserts checks in the same places as the `CheckAlignment` pass and additionally
also inserts checks for `Borrows`, so code like
```rust
let ptr: *const u32 = std::ptr::null();
let val: &u32 = unsafe { &*ptr };
```
will have a check inserted on dereference. This is done because null references
are UB. The alignment check doesn't cover these places, because in `&(*ptr).field`,
the exact requirement is that the final reference must be aligned. This is something to
consider further enhancements of the alignment check.
For now this is implemented as a separate `MirPass`, to make it easy to disable
this check if necessary.
This is related to a 2025H1 project goal for better UB checks in debug
mode: https://github.com/rust-lang/rust-project-goals/pull/177.
r? `@saethlin`
This commit is contained in:
commit
9c8fe3078e
1 changed files with 2 additions and 0 deletions
|
|
@ -166,6 +166,8 @@ impl rustc_driver::Callbacks for ClippyCallbacks {
|
|||
// MIR passes can be enabled / disabled separately, we should figure out, what passes to
|
||||
// use for Clippy.
|
||||
config.opts.unstable_opts.mir_opt_level = Some(0);
|
||||
config.opts.unstable_opts.mir_enable_passes =
|
||||
vec![("CheckNull".to_owned(), false), ("CheckAlignment".to_owned(), false)];
|
||||
|
||||
// Disable flattening and inlining of format_args!(), so the HIR matches with the AST.
|
||||
config.opts.unstable_opts.flatten_format_args = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue