mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 22:12:15 +00:00
compare with-flag to without-flag
This commit is contained in:
parent
7b2a5f284e
commit
2bd9479984
@ -1,36 +1,38 @@
|
||||
// compile-flags: -Zextra-const-ub-checks
|
||||
// revisions: no_flag with_flag
|
||||
// [no_flag] check-pass
|
||||
// [with_flag] compile-flags: -Zextra-const-ub-checks
|
||||
#![feature(const_ptr_read)]
|
||||
|
||||
use std::mem::transmute;
|
||||
|
||||
const INVALID_BOOL: () = unsafe {
|
||||
let _x: bool = transmute(3u8);
|
||||
//~^ ERROR: evaluation of constant value failed
|
||||
//~| invalid value
|
||||
//[with_flag]~^ ERROR: evaluation of constant value failed
|
||||
//[with_flag]~| invalid value
|
||||
};
|
||||
|
||||
const INVALID_PTR_IN_INT: () = unsafe {
|
||||
let _x: usize = transmute(&3u8);
|
||||
//~^ ERROR: evaluation of constant value failed
|
||||
//~| invalid value
|
||||
//[with_flag]~^ ERROR: evaluation of constant value failed
|
||||
//[with_flag]~| invalid value
|
||||
};
|
||||
|
||||
const INVALID_SLICE_TO_USIZE_TRANSMUTE: () = unsafe {
|
||||
let x: &[u8] = &[0; 32];
|
||||
let _x: (usize, usize) = transmute(x);
|
||||
//~^ ERROR: evaluation of constant value failed
|
||||
//~| invalid value
|
||||
//[with_flag]~^ ERROR: evaluation of constant value failed
|
||||
//[with_flag]~| invalid value
|
||||
};
|
||||
|
||||
const UNALIGNED_PTR: () = unsafe {
|
||||
let _x: &u32 = transmute(&[0u8; 4]);
|
||||
//~^ ERROR: evaluation of constant value failed
|
||||
//~| invalid value
|
||||
//[with_flag]~^ ERROR: evaluation of constant value failed
|
||||
//[with_flag]~| invalid value
|
||||
};
|
||||
|
||||
const UNALIGNED_READ: () = {
|
||||
INNER; //~ERROR any use of this value will cause an error
|
||||
//~| previously accepted
|
||||
INNER; //[with_flag]~ERROR any use of this value will cause an error
|
||||
//[with_flag]~| previously accepted
|
||||
// There is an error here but its span is in the standard library so we cannot match it...
|
||||
// so we have this in a *nested* const, such that the *outer* const fails to use it.
|
||||
const INNER: () = unsafe {
|
||||
|
@ -1,23 +1,23 @@
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/detect-extra-ub.rs:7:20
|
||||
--> $DIR/detect-extra-ub.rs:9:20
|
||||
|
|
||||
LL | let _x: bool = transmute(3u8);
|
||||
| ^^^^^^^^^^^^^^ constructing invalid value: encountered 0x03, but expected a boolean
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/detect-extra-ub.rs:13:21
|
||||
--> $DIR/detect-extra-ub.rs:15:21
|
||||
|
|
||||
LL | let _x: usize = transmute(&3u8);
|
||||
| ^^^^^^^^^^^^^^^ constructing invalid value: encountered (potentially part of) a pointer, but expected plain (non-pointer) bytes
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/detect-extra-ub.rs:20:30
|
||||
--> $DIR/detect-extra-ub.rs:22:30
|
||||
|
|
||||
LL | let _x: (usize, usize) = transmute(x);
|
||||
| ^^^^^^^^^^^^ constructing invalid value at .0: encountered (potentially part of) a pointer, but expected plain (non-pointer) bytes
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/detect-extra-ub.rs:26:20
|
||||
--> $DIR/detect-extra-ub.rs:28:20
|
||||
|
|
||||
LL | let _x: &u32 = transmute(&[0u8; 4]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered an unaligned reference (required 4 byte alignment but found 1)
|
||||
@ -36,13 +36,13 @@ LL | copy_nonoverlapping(src, tmp.as_mut_ptr(), 1);
|
||||
LL | unsafe { read(self) }
|
||||
| ---------- inside `ptr::const_ptr::<impl *const u32>::read` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||
|
|
||||
::: $DIR/detect-extra-ub.rs:39:9
|
||||
::: $DIR/detect-extra-ub.rs:41:9
|
||||
|
|
||||
LL | ptr.read();
|
||||
| ---------- inside `INNER` at $DIR/detect-extra-ub.rs:39:9
|
||||
| ---------- inside `INNER` at $DIR/detect-extra-ub.rs:41:9
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/detect-extra-ub.rs:32:5
|
||||
--> $DIR/detect-extra-ub.rs:34:5
|
||||
|
|
||||
LL | const UNALIGNED_READ: () = {
|
||||
| ------------------------
|
||||
@ -58,7 +58,7 @@ error: aborting due to 6 previous errors
|
||||
For more information about this error, try `rustc --explain E0080`.
|
||||
Future incompatibility report: Future breakage diagnostic:
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/detect-extra-ub.rs:32:5
|
||||
--> $DIR/detect-extra-ub.rs:34:5
|
||||
|
|
||||
LL | const UNALIGNED_READ: () = {
|
||||
| ------------------------
|
Loading…
Reference in New Issue
Block a user