Stabilize const_raw_ptr_deref for *const T
This stabilizes dereferencing immutable raw pointers in const contexts. It does not stabilize `*mut T` dereferencing. This is placed behind the `const_raw_mut_ptr_deref` feature gate.
This commit is contained in:
parent
5ec7d1dad6
commit
0cdbeaa2a3
62 changed files with 114 additions and 193 deletions
|
|
@ -1,6 +1,6 @@
|
|||
#![feature(const_raw_ptr_deref)]
|
||||
#![feature(const_mut_refs)]
|
||||
|
||||
const REG_ADDR: *const u8 = 0x5f3759df as *const u8;
|
||||
const REG_ADDR: *mut u8 = 0x5f3759df as *mut u8;
|
||||
|
||||
const VALUE: u8 = unsafe { *REG_ADDR };
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
// gate-test-const_raw_ptr_deref
|
||||
|
||||
const REG_ADDR: *const u8 = 0x5f3759df as *const u8;
|
||||
const REG_ADDR: *mut u8 = 0x5f3759df as *mut u8;
|
||||
|
||||
const VALUE: u8 = unsafe { *REG_ADDR };
|
||||
//~^ ERROR dereferencing raw pointers in constants is unstable
|
||||
//~^ ERROR dereferencing raw mutable pointers in constants is unstable
|
||||
|
||||
const unsafe fn unreachable() -> ! {
|
||||
use std::convert::Infallible;
|
||||
|
||||
const INFALLIBLE: *const Infallible = [].as_ptr();
|
||||
const INFALLIBLE: *mut Infallible = &[] as *const [Infallible] as *const _ as _;
|
||||
match *INFALLIBLE {}
|
||||
//~^ ERROR dereferencing raw pointers in constant functions is unstable
|
||||
//~^ ERROR dereferencing raw mutable pointers in constant functions is unstable
|
||||
|
||||
const BAD: () = unsafe { match *INFALLIBLE {} };
|
||||
//~^ ERROR dereferencing raw pointers in constants is unstable
|
||||
//~^ ERROR dereferencing raw mutable pointers in constants is unstable
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
|||
|
|
@ -1,29 +1,29 @@
|
|||
error[E0658]: dereferencing raw pointers in constants is unstable
|
||||
--> $DIR/E0396.rs:5:28
|
||||
error[E0658]: dereferencing raw mutable pointers in constants is unstable
|
||||
--> $DIR/E0396.rs:3:28
|
||||
|
|
||||
LL | const VALUE: u8 = unsafe { *REG_ADDR };
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51911 <https://github.com/rust-lang/rust/issues/51911> for more information
|
||||
= help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
|
||||
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: dereferencing raw pointers in constant functions is unstable
|
||||
--> $DIR/E0396.rs:12:11
|
||||
error[E0658]: dereferencing raw mutable pointers in constant functions is unstable
|
||||
--> $DIR/E0396.rs:10:11
|
||||
|
|
||||
LL | match *INFALLIBLE {}
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51911 <https://github.com/rust-lang/rust/issues/51911> for more information
|
||||
= help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
|
||||
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: dereferencing raw pointers in constants is unstable
|
||||
--> $DIR/E0396.rs:15:36
|
||||
error[E0658]: dereferencing raw mutable pointers in constants is unstable
|
||||
--> $DIR/E0396.rs:13:36
|
||||
|
|
||||
LL | const BAD: () = unsafe { match *INFALLIBLE {} };
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51911 <https://github.com/rust-lang/rust/issues/51911> for more information
|
||||
= help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
|
||||
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue