1
Fork 0

make sure raw ptr casts in 'const' context are unsafe

This commit is contained in:
Ralf Jung 2021-04-25 16:32:05 +02:00
parent 43126f3573
commit b1ad1fbc03
4 changed files with 76 additions and 25 deletions

View file

@ -1,11 +1,25 @@
// gate-test-const_raw_ptr_to_usize_cast // gate-test-const_raw_ptr_to_usize_cast
// revisions: with_feature without_feature
#![cfg_attr(with_feature, feature(const_raw_ptr_to_usize_cast))]
fn main() { fn main() {
const X: u32 = unsafe { const X: usize = unsafe {
main as u32 //~ ERROR casting pointers to integers in constants is unstable main as usize //[without_feature]~ ERROR casting pointers to integers in constants is unstable
}; };
const Y: u32 = 0; const Y: u32 = 0;
const Z: u32 = unsafe { const Z: usize = unsafe {
&Y as *const u32 as u32 //~ ERROR is unstable &Y as *const u32 as usize //[without_feature]~ ERROR is unstable
};
// Cast in `const` without `unsafe` block
const SAFE: usize = {
&Y as *const u32 as usize //[without_feature]~ ERROR is unstable
//[with_feature]~^ ERROR cast of pointer to int is unsafe and requires unsafe
}; };
} }
// Cast in `const fn` without `unsafe` block
const fn test() -> usize {
&0 as *const i32 as usize //[without_feature]~ ERROR is unstable
//[with_feature]~^ ERROR cast of pointer to int is unsafe and requires unsafe
}

View file

@ -1,21 +0,0 @@
error[E0658]: casting pointers to integers in constants is unstable
--> $DIR/cast-ptr-to-int-const.rs:5:9
|
LL | main as u32
| ^^^^^^^^^^^
|
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
error[E0658]: casting pointers to integers in constants is unstable
--> $DIR/cast-ptr-to-int-const.rs:9:9
|
LL | &Y as *const u32 as u32
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.

View file

@ -0,0 +1,19 @@
error[E0133]: cast of pointer to int is unsafe and requires unsafe function or block
--> $DIR/cast-ptr-to-int-const.rs:16:9
|
LL | &Y as *const u32 as usize
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cast of pointer to int
|
= note: casting pointers to integers in constants
error[E0133]: cast of pointer to int is unsafe and requires unsafe function or block
--> $DIR/cast-ptr-to-int-const.rs:23:5
|
LL | &0 as *const i32 as usize
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cast of pointer to int
|
= note: casting pointers to integers in constants
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0133`.

View file

@ -0,0 +1,39 @@
error[E0658]: casting pointers to integers in constants is unstable
--> $DIR/cast-ptr-to-int-const.rs:8:9
|
LL | main as usize
| ^^^^^^^^^^^^^
|
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
error[E0658]: casting pointers to integers in constants is unstable
--> $DIR/cast-ptr-to-int-const.rs:12:9
|
LL | &Y as *const u32 as usize
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
error[E0658]: casting pointers to integers in constants is unstable
--> $DIR/cast-ptr-to-int-const.rs:16:9
|
LL | &Y as *const u32 as usize
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
error[E0658]: casting pointers to integers in constant functions is unstable
--> $DIR/cast-ptr-to-int-const.rs:23:5
|
LL | &0 as *const i32 as usize
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0658`.