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:
Jacob Pratt 2021-10-05 04:55:57 -04:00
parent 5ec7d1dad6
commit 0cdbeaa2a3
No known key found for this signature in database
GPG key ID: B80E19E4662B5AA4
62 changed files with 114 additions and 193 deletions

View file

@ -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

View file

@ -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() {

View file

@ -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