Auto merge of #130540 - veera-sivarajan:fix-87525, r=estebank
Add a Lint for Pointer to Integer Transmutes in Consts Fixes #87525 This PR adds a MirLint for pointer to integer transmutes in const functions and associated consts. The implementation closely follows this comment: https://github.com/rust-lang/rust/pull/85769#issuecomment-880969112. More details about the implementation can be found in the comments. Note: This could break some sound code as mentioned by RalfJung in https://github.com/rust-lang/rust/pull/85769#issuecomment-886491680: > ... technically const-code could transmute/cast an int to a ptr and then transmute it back and that would be correct -- so the lint will deny some sound code. Does not seem terribly likely though. References: 1. https://doc.rust-lang.org/std/mem/fn.transmute.html 2. https://doc.rust-lang.org/reference/items/associated-items.html#associated-constants
This commit is contained in:
commit
d0507302fc
@ -84,8 +84,11 @@ fn issue_10449() {
|
||||
}
|
||||
|
||||
// Pointers cannot be cast to integers in const contexts
|
||||
#[allow(ptr_to_integer_transmute_in_consts, reason = "This is tested in the compiler test suite")]
|
||||
const fn issue_12402<P>(ptr: *const P) {
|
||||
unsafe { transmute::<*const i32, usize>(&42i32) };
|
||||
unsafe { transmute::<fn(*const P), usize>(issue_12402) };
|
||||
let _ = unsafe { transmute::<_, usize>(ptr) };
|
||||
// This test exists even though the compiler lints against it
|
||||
// to test that clippy's transmute lints do not trigger on this.
|
||||
unsafe { std::mem::transmute::<*const i32, usize>(&42i32) };
|
||||
unsafe { std::mem::transmute::<fn(*const P), usize>(issue_12402) };
|
||||
let _ = unsafe { std::mem::transmute::<_, usize>(ptr) };
|
||||
}
|
||||
|
@ -84,8 +84,11 @@ fn issue_10449() {
|
||||
}
|
||||
|
||||
// Pointers cannot be cast to integers in const contexts
|
||||
#[allow(ptr_to_integer_transmute_in_consts, reason = "This is tested in the compiler test suite")]
|
||||
const fn issue_12402<P>(ptr: *const P) {
|
||||
unsafe { transmute::<*const i32, usize>(&42i32) };
|
||||
unsafe { transmute::<fn(*const P), usize>(issue_12402) };
|
||||
let _ = unsafe { transmute::<_, usize>(ptr) };
|
||||
// This test exists even though the compiler lints against it
|
||||
// to test that clippy's transmute lints do not trigger on this.
|
||||
unsafe { std::mem::transmute::<*const i32, usize>(&42i32) };
|
||||
unsafe { std::mem::transmute::<fn(*const P), usize>(issue_12402) };
|
||||
let _ = unsafe { std::mem::transmute::<_, usize>(ptr) };
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user