Rollup merge of #135003 - RalfJung:deprecate-allowed-through-unstable, r=davidtwco
deprecate `std::intrinsics::transmute` etc, use `std::mem::*` instead The `rustc_allowed_through_unstable_modules` attribute lets users call `std::mem::transmute` as `std::intrinsics::transmute`. The former is a reexport of the latter, and for a long time we didn't properly check stability for reexports, so making this a hard error now would be a breaking change for little gain. But at the same time, `std::intrinsics::transmute` is not the intended path for this function, so I think it is a good idea to show a deprecation warning when that path is used. This PR implements that, for all the functions in `std::intrinsics` that carry the attribute. I assume this will need ``@rust-lang/libs-api`` FCP.
This commit is contained in:
commit
e31493b9b8
5 changed files with 32 additions and 32 deletions
|
|
@ -180,7 +180,7 @@ fn is_stable(cx: &LateContext<'_>, mut def_id: DefId, msrv: &Msrv) -> bool {
|
|||
if let Some(stability) = cx.tcx.lookup_stability(def_id)
|
||||
&& let StabilityLevel::Stable {
|
||||
since,
|
||||
allowed_through_unstable_modules: false,
|
||||
allowed_through_unstable_modules: None,
|
||||
} = stability.level
|
||||
{
|
||||
let stable = match since {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
//@aux-build:proc_macro_derive.rs
|
||||
|
||||
#![warn(clippy::std_instead_of_core)]
|
||||
#![allow(unused_imports)]
|
||||
#![allow(unused_imports, deprecated)]
|
||||
|
||||
extern crate alloc;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
//@aux-build:proc_macro_derive.rs
|
||||
|
||||
#![warn(clippy::std_instead_of_core)]
|
||||
#![allow(unused_imports)]
|
||||
#![allow(unused_imports, deprecated)]
|
||||
|
||||
extern crate alloc;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,31 +24,31 @@ fn my_vec() -> MyVec<i32> {
|
|||
#[warn(clippy::useless_transmute)]
|
||||
unsafe fn _generic<'a, T, U: 'a>(t: &'a T) {
|
||||
// FIXME: should lint
|
||||
// let _: &'a T = core::intrinsics::transmute(t);
|
||||
// let _: &'a T = core::mem::transmute(t);
|
||||
|
||||
let _: &'a U = core::intrinsics::transmute(t);
|
||||
let _: &'a U = core::mem::transmute(t);
|
||||
|
||||
let _: *const T = core::intrinsics::transmute(t);
|
||||
let _: *const T = core::mem::transmute(t);
|
||||
//~^ ERROR: transmute from a reference to a pointer
|
||||
//~| NOTE: `-D clippy::useless-transmute` implied by `-D warnings`
|
||||
|
||||
let _: *mut T = core::intrinsics::transmute(t);
|
||||
let _: *mut T = core::mem::transmute(t);
|
||||
//~^ ERROR: transmute from a reference to a pointer
|
||||
|
||||
let _: *const U = core::intrinsics::transmute(t);
|
||||
let _: *const U = core::mem::transmute(t);
|
||||
//~^ ERROR: transmute from a reference to a pointer
|
||||
}
|
||||
|
||||
#[warn(clippy::useless_transmute)]
|
||||
fn useless() {
|
||||
unsafe {
|
||||
let _: Vec<i32> = core::intrinsics::transmute(my_vec());
|
||||
let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
//~^ ERROR: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
|
||||
let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
//~^ ERROR: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
|
||||
let _: Vec<i32> = std::intrinsics::transmute(my_vec());
|
||||
let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
//~^ ERROR: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
|
||||
let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
|
|
@ -94,17 +94,17 @@ fn crosspointer() {
|
|||
let int_mut_ptr: *mut Usize = &mut int as *mut Usize;
|
||||
|
||||
unsafe {
|
||||
let _: Usize = core::intrinsics::transmute(int_const_ptr);
|
||||
let _: Usize = core::mem::transmute(int_const_ptr);
|
||||
//~^ ERROR: transmute from a type (`*const Usize`) to the type that it points to (
|
||||
//~| NOTE: `-D clippy::crosspointer-transmute` implied by `-D warnings`
|
||||
|
||||
let _: Usize = core::intrinsics::transmute(int_mut_ptr);
|
||||
let _: Usize = core::mem::transmute(int_mut_ptr);
|
||||
//~^ ERROR: transmute from a type (`*mut Usize`) to the type that it points to (`U
|
||||
|
||||
let _: *const Usize = core::intrinsics::transmute(my_int());
|
||||
let _: *const Usize = core::mem::transmute(my_int());
|
||||
//~^ ERROR: transmute from a type (`Usize`) to a pointer to that type (`*const Usi
|
||||
|
||||
let _: *mut Usize = core::intrinsics::transmute(my_int());
|
||||
let _: *mut Usize = core::mem::transmute(my_int());
|
||||
//~^ ERROR: transmute from a type (`Usize`) to a pointer to that type (`*mut Usize
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmute.rs:31:23
|
||||
|
|
||||
LL | let _: *const T = core::intrinsics::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T`
|
||||
LL | let _: *const T = core::mem::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T`
|
||||
|
|
||||
= note: `-D clippy::useless-transmute` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::useless_transmute)]`
|
||||
|
|
@ -10,20 +10,20 @@ LL | let _: *const T = core::intrinsics::transmute(t);
|
|||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmute.rs:35:21
|
||||
|
|
||||
LL | let _: *mut T = core::intrinsics::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *mut T`
|
||||
LL | let _: *mut T = core::mem::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *mut T`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmute.rs:38:23
|
||||
|
|
||||
LL | let _: *const U = core::intrinsics::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *const U`
|
||||
LL | let _: *const U = core::mem::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *const U`
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:45:27
|
||||
|
|
||||
LL | let _: Vec<i32> = core::intrinsics::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:48:27
|
||||
|
|
@ -34,8 +34,8 @@ LL | let _: Vec<i32> = core::mem::transmute(my_vec());
|
|||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:51:27
|
||||
|
|
||||
LL | let _: Vec<i32> = std::intrinsics::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:54:27
|
||||
|
|
@ -64,8 +64,8 @@ LL | let _: *const usize = std::mem::transmute(1 + 1usize);
|
|||
error: transmute from a type (`*const Usize`) to the type that it points to (`Usize`)
|
||||
--> tests/ui/transmute.rs:97:24
|
||||
|
|
||||
LL | let _: Usize = core::intrinsics::transmute(int_const_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | let _: Usize = core::mem::transmute(int_const_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::crosspointer-transmute` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::crosspointer_transmute)]`
|
||||
|
|
@ -73,20 +73,20 @@ LL | let _: Usize = core::intrinsics::transmute(int_const_ptr);
|
|||
error: transmute from a type (`*mut Usize`) to the type that it points to (`Usize`)
|
||||
--> tests/ui/transmute.rs:101:24
|
||||
|
|
||||
LL | let _: Usize = core::intrinsics::transmute(int_mut_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | let _: Usize = core::mem::transmute(int_mut_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`Usize`) to a pointer to that type (`*const Usize`)
|
||||
--> tests/ui/transmute.rs:104:31
|
||||
|
|
||||
LL | let _: *const Usize = core::intrinsics::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | let _: *const Usize = core::mem::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`Usize`) to a pointer to that type (`*mut Usize`)
|
||||
--> tests/ui/transmute.rs:107:29
|
||||
|
|
||||
LL | let _: *mut Usize = core::intrinsics::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | let _: *mut Usize = core::mem::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a `u8` to a `bool`
|
||||
--> tests/ui/transmute.rs:114:28
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue