make sure raw ptr casts in 'const' context are unsafe
This commit is contained in:
parent
43126f3573
commit
b1ad1fbc03
4 changed files with 76 additions and 25 deletions
|
@ -1,11 +1,25 @@
|
|||
// 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() {
|
||||
const X: u32 = unsafe {
|
||||
main as u32 //~ ERROR casting pointers to integers in constants is unstable
|
||||
const X: usize = unsafe {
|
||||
main as usize //[without_feature]~ ERROR casting pointers to integers in constants is unstable
|
||||
};
|
||||
const Y: u32 = 0;
|
||||
const Z: u32 = unsafe {
|
||||
&Y as *const u32 as u32 //~ ERROR is unstable
|
||||
const Z: usize = unsafe {
|
||||
&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
|
||||
}
|
||||
|
|
|
@ -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`.
|
19
src/test/ui/cast/cast-ptr-to-int-const.with_feature.stderr
Normal file
19
src/test/ui/cast/cast-ptr-to-int-const.with_feature.stderr
Normal 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`.
|
|
@ -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`.
|
Loading…
Add table
Add a link
Reference in a new issue