compare with-flag to without-flag

This commit is contained in:
Ralf Jung 2022-08-09 09:40:44 -04:00
parent 7b2a5f284e
commit 2bd9479984
2 changed files with 21 additions and 19 deletions

View File

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

View File

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