Skip to content

Commit 38218d6

Browse files
committed
Auto merge of #111567 - Urgau:uplift_cast_ref_to_mut, r=b-naber
Uplift `clippy::cast_ref_to_mut` lint This PR aims at uplifting the `clippy::cast_ref_to_mut` lint into rustc. ## `cast_ref_to_mut` (deny-by-default) The `cast_ref_to_mut` lint checks for casts of `&T` to `&mut T` without using interior mutability. ### Example ```rust,compile_fail fn x(r: &i32) { unsafe { *(r as *const i32 as *mut i32) += 1; } } ``` ### Explanation Casting `&T` to `&mut T` without interior mutability is undefined behavior, as it's a violation of Rust reference aliasing requirements. ----- Mostly followed the instructions for uplifting a clippy lint described here: rust-lang/rust#99696 (review) `@rustbot` label: +I-lang-nominated r? compiler ----- For Clippy: changelog: Moves: Uplifted `clippy::cast_ref_to_mut` into rustc
2 parents 6e859d5 + ec3175e commit 38218d6

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

tests/fail/modifying_constants.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// This should fail even without validation/SB
22
//@compile-flags: -Zmiri-disable-validation -Zmiri-disable-stacked-borrows
33

4+
#![allow(cast_ref_to_mut)]
5+
46
fn main() {
57
let x = &1; // the `&1` is promoted to a constant, but it used to be that only the pointer is marked static, not the pointee
68
let y = unsafe { &mut *(x as *const i32 as *mut i32) };

tests/fail/stacked_borrows/shr_frozen_violation1.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![allow(cast_ref_to_mut)]
2+
13
fn foo(x: &mut i32) -> i32 {
24
*x = 5;
35
unknown_code(&*x);

0 commit comments

Comments
 (0)