fmt, tweak messages and bless
This commit is contained in:
parent
f5efb68a24
commit
d02543a453
@ -14,7 +14,7 @@
|
||||
use rustc_macros::HashStable;
|
||||
use rustc_session::CtfeBacktrace;
|
||||
use rustc_span::{Pos, Span, def_id::DefId};
|
||||
use std::{any::Any, env, fmt};
|
||||
use std::{any::Any, fmt};
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, HashStable, RustcEncodable, RustcDecodable)]
|
||||
pub enum ErrorHandled {
|
||||
@ -326,7 +326,10 @@ pub enum UndefinedBehaviorInfo {
|
||||
/// An enum discriminant was set to a value which was outside the range of valid values.
|
||||
InvalidDiscriminant(ScalarMaybeUndef),
|
||||
/// A slice/array index projection went out-of-bounds.
|
||||
BoundsCheckFailed { len: u64, index: u64 },
|
||||
BoundsCheckFailed {
|
||||
len: u64,
|
||||
index: u64,
|
||||
},
|
||||
/// Something was divided by 0 (x / 0).
|
||||
DivisionByZero,
|
||||
/// Something was "remainded" by 0 (x % 0).
|
||||
@ -395,16 +398,14 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
"reading a null-terminated string starting at {:?} with no null found before end of allocation",
|
||||
p,
|
||||
),
|
||||
PointerUseAfterFree(a) => write!(
|
||||
f,
|
||||
"pointer to allocation {:?} was dereferenced after allocation got freed",
|
||||
a
|
||||
),
|
||||
PointerUseAfterFree(a) => {
|
||||
write!(f, "pointer to {:?} was dereferenced after this allocation got freed", a)
|
||||
}
|
||||
InvalidNullPointerUsage => write!(f, "invalid use of NULL pointer"),
|
||||
PointerOutOfBounds { ptr, msg, allocation_size } => write!(
|
||||
f,
|
||||
"{} failed: pointer must be in-bounds at offset {}, \
|
||||
but is outside bounds of allocation {} which has size {}",
|
||||
but is outside bounds of {} which has size {}",
|
||||
msg,
|
||||
ptr.offset.bytes(),
|
||||
ptr.alloc_id,
|
||||
@ -416,16 +417,23 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
has.bytes(),
|
||||
required.bytes()
|
||||
),
|
||||
WriteToReadOnly(a) => write!(f, "writing to read-only allocation {:?}", a),
|
||||
WriteToReadOnly(a) => write!(f, "writing to {:?} which is read-only", a),
|
||||
InvalidFunctionPointer(p) => {
|
||||
write!(f, "using {:?} as function pointer but it does not point to a function", p)
|
||||
}
|
||||
DerefFunctionPointer(a) => write!(f, "accessing data behind function pointer allocation {:?}", a),
|
||||
DerefFunctionPointer(a) => write!(f, "accessing {:?} which contains a function", a),
|
||||
ValidationFailure(ref err) => write!(f, "type validation failed: {}", err),
|
||||
InvalidBool(b) => write!(f, "interpreting an invalid 8-bit value as a bool: {}", b),
|
||||
InvalidChar(c) => write!(f, "interpreting an invalid 32-bit value as a char: {}", c),
|
||||
InvalidUndefBytes(Some(p)) => write!(f, "reading uninitialized memory at {:?}, but this operation requires initialized memory", p),
|
||||
InvalidUndefBytes(None) => write!(f, "using uninitialized data, but this operation requires initialized memory"),
|
||||
InvalidUndefBytes(Some(p)) => write!(
|
||||
f,
|
||||
"reading uninitialized memory at {:?}, but this operation requires initialized memory",
|
||||
p
|
||||
),
|
||||
InvalidUndefBytes(None) => write!(
|
||||
f,
|
||||
"using uninitialized data, but this operation requires initialized memory"
|
||||
),
|
||||
DeadLocal => write!(f, "accessing a dead local variable"),
|
||||
ReadFromReturnPlace => write!(f, "tried to read from the return place"),
|
||||
}
|
||||
@ -472,7 +480,9 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
ConstPropUnsupported(ref msg) => {
|
||||
write!(f, "Constant propagation encountered an unsupported situation: {}", msg)
|
||||
}
|
||||
ReadForeignStatic(did) => write!(f, "tried to read from foreign (extern) static {:?}", did),
|
||||
ReadForeignStatic(did) => {
|
||||
write!(f, "tried to read from foreign (extern) static {:?}", did)
|
||||
}
|
||||
NoMirFor(did) => write!(f, "could not load MIR for {:?}", did),
|
||||
ModifiedStatic => write!(
|
||||
f,
|
||||
@ -480,13 +490,8 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
initializer"
|
||||
),
|
||||
|
||||
ReadPointerAsBytes => write!(
|
||||
f,
|
||||
"unable to turn this pointer into raw bytes",
|
||||
),
|
||||
ReadBytesAsPointer => {
|
||||
write!(f, "unable to turn these bytes into a pointer")
|
||||
}
|
||||
ReadPointerAsBytes => write!(f, "unable to turn this pointer into raw bytes",),
|
||||
ReadBytesAsPointer => write!(f, "unable to turn these bytes into a pointer"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,10 @@ pub fn reallocate(
|
||||
kind: MemoryKind<M::MemoryKinds>,
|
||||
) -> InterpResult<'tcx, Pointer<M::PointerTag>> {
|
||||
if ptr.offset.bytes() != 0 {
|
||||
throw_ub_format!("reallocating {:?} which does not point to the beginning of an object", ptr);
|
||||
throw_ub_format!(
|
||||
"reallocating {:?} which does not point to the beginning of an object",
|
||||
ptr
|
||||
);
|
||||
}
|
||||
|
||||
// For simplicities' sake, we implement reallocate as "alloc, copy, dealloc".
|
||||
@ -251,7 +254,10 @@ pub fn deallocate(
|
||||
trace!("deallocating: {}", ptr.alloc_id);
|
||||
|
||||
if ptr.offset.bytes() != 0 {
|
||||
throw_ub_format!("deallocating {:?} which does not point to the beginning of an object", ptr);
|
||||
throw_ub_format!(
|
||||
"deallocating {:?} which does not point to the beginning of an object",
|
||||
ptr
|
||||
);
|
||||
}
|
||||
|
||||
let (alloc_kind, mut alloc) = match self.alloc_map.remove(&ptr.alloc_id) {
|
||||
@ -260,8 +266,9 @@ pub fn deallocate(
|
||||
// Deallocating static memory -- always an error
|
||||
return Err(match self.tcx.alloc_map.lock().get(ptr.alloc_id) {
|
||||
Some(GlobalAlloc::Function(..)) => err_ub_format!("deallocating a function"),
|
||||
Some(GlobalAlloc::Static(..)) | Some(GlobalAlloc::Memory(..)) =>
|
||||
err_ub_format!("deallocating static memory"),
|
||||
Some(GlobalAlloc::Static(..)) | Some(GlobalAlloc::Memory(..)) => {
|
||||
err_ub_format!("deallocating static memory")
|
||||
}
|
||||
None => err_ub!(PointerUseAfterFree(ptr.alloc_id)),
|
||||
}
|
||||
.into());
|
||||
@ -269,13 +276,20 @@ pub fn deallocate(
|
||||
};
|
||||
|
||||
if alloc_kind != kind {
|
||||
throw_ub_format!("deallocating `{:?}` memory using `{:?}` deallocation operation", alloc_kind, kind);
|
||||
throw_ub_format!(
|
||||
"deallocating `{:?}` memory using `{:?}` deallocation operation",
|
||||
alloc_kind,
|
||||
kind
|
||||
);
|
||||
}
|
||||
if let Some((size, align)) = old_size_and_align {
|
||||
if size != alloc.size || align != alloc.align {
|
||||
throw_ub_format!(
|
||||
"incorrect layout on deallocation: allocation has size {} and alignment {}, but gave size {} and alignment {}",
|
||||
alloc.size.bytes(), alloc.align.bytes(), size.bytes(), align.bytes(),
|
||||
alloc.size.bytes(),
|
||||
alloc.align.bytes(),
|
||||
size.bytes(),
|
||||
align.bytes(),
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -370,7 +384,8 @@ fn check_offset_align(offset: u64, align: Align) -> InterpResult<'static> {
|
||||
// It is sufficient to check this for the end pointer. The addition
|
||||
// checks for overflow.
|
||||
let end_ptr = ptr.offset(size, self)?;
|
||||
if end_ptr.offset > allocation_size { // equal is okay!
|
||||
if end_ptr.offset > allocation_size {
|
||||
// equal is okay!
|
||||
throw_ub!(PointerOutOfBounds { ptr: end_ptr.erase_tag(), msg, allocation_size })
|
||||
}
|
||||
// Test align. Check this last; if both bounds and alignment are violated
|
||||
|
@ -356,18 +356,16 @@ fn check_safe_pointer(
|
||||
err_ub!(InvalidNullPointerUsage) => {
|
||||
throw_validation_failure!(format_args!("a NULL {}", kind), self.path)
|
||||
}
|
||||
err_ub!(AlignmentCheckFailed { required, has }) => {
|
||||
throw_validation_failure!(
|
||||
format_args!(
|
||||
"an unaligned {} \
|
||||
err_ub!(AlignmentCheckFailed { required, has }) => throw_validation_failure!(
|
||||
format_args!(
|
||||
"an unaligned {} \
|
||||
(required {} byte alignment but found {})",
|
||||
kind,
|
||||
required.bytes(),
|
||||
has.bytes()
|
||||
),
|
||||
self.path
|
||||
)
|
||||
}
|
||||
kind,
|
||||
required.bytes(),
|
||||
has.bytes()
|
||||
),
|
||||
self.path
|
||||
),
|
||||
err_unsup!(ReadBytesAsPointer) => throw_validation_failure!(
|
||||
format_args!("a dangling {} (created from integer)", kind),
|
||||
self.path
|
||||
|
@ -12,7 +12,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_U8_UNION: u8 = unsafe { Nonsense { int_32_ref: &3 }.uint_8 };
|
||||
| --------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
|
||||
= note: `#[deny(const_err)]` on by default
|
||||
|
||||
@ -22,7 +22,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_U16_UNION: u16 = unsafe { Nonsense { int_32_ref: &3 }.uint_16 };
|
||||
| ----------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:34:45
|
||||
@ -30,7 +30,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_U32_UNION: u32 = unsafe { Nonsense { int_32_ref: &3 }.uint_32 };
|
||||
| ----------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:37:5
|
||||
@ -54,7 +54,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_I8_UNION: i8 = unsafe { Nonsense { int_32_ref: &3 }.int_8 };
|
||||
| --------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:46:45
|
||||
@ -62,7 +62,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_I16_UNION: i16 = unsafe { Nonsense { int_32_ref: &3 }.int_16 };
|
||||
| ----------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:49:45
|
||||
@ -70,7 +70,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_I32_UNION: i32 = unsafe { Nonsense { int_32_ref: &3 }.int_32 };
|
||||
| ----------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:52:5
|
||||
@ -94,7 +94,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_F32_UNION: f32 = unsafe { Nonsense { int_32_ref: &3 }.float_32 };
|
||||
| ----------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:61:5
|
||||
@ -110,7 +110,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_BOOL_UNION: bool = unsafe { Nonsense { int_32_ref: &3 }.truthy_falsey };
|
||||
| ------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:67:47
|
||||
@ -118,7 +118,7 @@ error: any use of this value will cause an error
|
||||
LL | const I32_REF_CHAR_UNION: char = unsafe { Nonsense { int_32_ref: &3 }.character };
|
||||
| ------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:70:39
|
||||
@ -126,7 +126,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_U8_UNION: u8 = unsafe { Nonsense { stringy: "3" }.uint_8 };
|
||||
| ----------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:73:41
|
||||
@ -134,7 +134,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_U16_UNION: u16 = unsafe { Nonsense { stringy: "3" }.uint_16 };
|
||||
| ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:76:41
|
||||
@ -142,7 +142,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_U32_UNION: u32 = unsafe { Nonsense { stringy: "3" }.uint_32 };
|
||||
| ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:79:5
|
||||
@ -158,7 +158,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_U128_UNION: u128 = unsafe { Nonsense { stringy: "3" }.uint_128 };
|
||||
| --------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:85:39
|
||||
@ -166,7 +166,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_I8_UNION: i8 = unsafe { Nonsense { stringy: "3" }.int_8 };
|
||||
| ----------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:88:41
|
||||
@ -174,7 +174,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_I16_UNION: i16 = unsafe { Nonsense { stringy: "3" }.int_16 };
|
||||
| ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:91:41
|
||||
@ -182,7 +182,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_I32_UNION: i32 = unsafe { Nonsense { stringy: "3" }.int_32 };
|
||||
| ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:94:5
|
||||
@ -198,7 +198,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_I128_UNION: i128 = unsafe { Nonsense { stringy: "3" }.int_128 };
|
||||
| --------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:100:41
|
||||
@ -206,7 +206,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_F32_UNION: f32 = unsafe { Nonsense { stringy: "3" }.float_32 };
|
||||
| ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:103:5
|
||||
@ -222,7 +222,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_BOOL_UNION: bool = unsafe { Nonsense { stringy: "3" }.truthy_falsey };
|
||||
| --------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const-pointer-values-in-various-types.rs:109:43
|
||||
@ -230,7 +230,7 @@ error: any use of this value will cause an error
|
||||
LL | const STR_CHAR_UNION: char = unsafe { Nonsense { stringy: "3" }.character };
|
||||
| --------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a raw memory access tried to access part of a pointer value as raw bytes
|
||||
| unable to turn this pointer into raw bytes
|
||||
|
||||
error: aborting due to 29 previous errors
|
||||
|
||||
|
@ -30,7 +30,7 @@ error: any use of this value will cause an error
|
||||
LL | const Z2: i32 = unsafe { *(42 as *const i32) };
|
||||
| -------------------------^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a memory access tried to interpret some bytes as a pointer
|
||||
| unable to turn these bytes into a pointer
|
||||
|
||||
error: any use of this value will cause an error
|
||||
--> $DIR/const_raw_ptr_ops.rs:17:26
|
||||
@ -38,7 +38,7 @@ error: any use of this value will cause an error
|
||||
LL | const Z3: i32 = unsafe { *(44 as *const i32) };
|
||||
| -------------------------^^^^^^^^^^^^^^^^^^^---
|
||||
| |
|
||||
| a memory access tried to interpret some bytes as a pointer
|
||||
| unable to turn these bytes into a pointer
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
@ -4,7 +4,7 @@ error: any use of this value will cause an error
|
||||
LL | const X: u64 = *wat(42);
|
||||
| ---------------^^^^^^^^-
|
||||
| |
|
||||
| dangling pointer was dereferenced
|
||||
| pointer to alloc2 was dereferenced after this allocation got freed
|
||||
|
|
||||
= note: `#[deny(const_err)]` on by default
|
||||
|
||||
|
@ -13,7 +13,7 @@ LL | / const OUT_OF_BOUNDS_PTR: NonNull<u8> = { unsafe {
|
||||
LL | | let ptr: &[u8; 256] = mem::transmute(&0u8); // &0 gets promoted so it does not dangle
|
||||
LL | | // Use address-of-element for pointer arithmetic. This could wrap around to NULL!
|
||||
LL | | let out_of_bounds_ptr = &ptr[255];
|
||||
| | ^^^^^^^^^ Memory access failed: pointer must be in-bounds at offset 256, but is outside bounds of allocation 8 which has size 1
|
||||
| | ^^^^^^^^^ Memory access failed: pointer must be in-bounds at offset 256, but is outside bounds of alloc8 which has size 1
|
||||
LL | | mem::transmute(out_of_bounds_ptr)
|
||||
LL | | } };
|
||||
| |____-
|
||||
|
@ -6,7 +6,7 @@
|
||||
use std::mem;
|
||||
|
||||
// normalize-stderr-test "offset \d+" -> "offset N"
|
||||
// normalize-stderr-test "allocation \d+" -> "allocation N"
|
||||
// normalize-stderr-test "alloc\d+" -> "allocN"
|
||||
// normalize-stderr-test "size \d+" -> "size N"
|
||||
|
||||
#[repr(C)]
|
||||
|
@ -192,7 +192,7 @@ error[E0080]: could not evaluate static initializer
|
||||
--> $DIR/ub-wide-ptr.rs:125:5
|
||||
|
|
||||
LL | mem::transmute::<_, &dyn Trait>((&92u8, &3u64))
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Memory access failed: pointer must be in-bounds at offset N, but is outside bounds of allocation N which has size N
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Memory access failed: pointer must be in-bounds at offset N, but is outside bounds of allocN which has size N
|
||||
|
||||
error: aborting due to 24 previous errors
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | / const FOO: &() = {
|
||||
LL | | let y = ();
|
||||
LL | | unsafe { Foo { y: &y }.long_live_the_unit }
|
||||
LL | | };
|
||||
| |__^ type validation failed: encountered dangling pointer in final constant
|
||||
| |__^ encountered dangling pointer in final constant
|
||||
|
|
||||
= note: `#[deny(const_err)]` on by default
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | / const FOO: *const u32 = {
|
||||
LL | | let x = 42;
|
||||
LL | | &x
|
||||
LL | | };
|
||||
| |__^ type validation failed: encountered dangling pointer in final constant
|
||||
| |__^ encountered dangling pointer in final constant
|
||||
|
|
||||
= note: `#[deny(const_err)]` on by default
|
||||
|
||||
|
@ -16,7 +16,7 @@ error: any use of this value will cause an error
|
||||
LL | my_fn();
|
||||
| ^^^^^^^
|
||||
| |
|
||||
| tried to call a function with ABI C using caller ABI Rust
|
||||
| calling a function with ABI C using caller ABI Rust
|
||||
| inside call to `call_rust_fn` at $DIR/abi-mismatch.rs:13:17
|
||||
...
|
||||
LL | const VAL: () = call_rust_fn(unsafe { std::mem::transmute(c_fn as extern "C" fn()) });
|
||||
|
@ -11,7 +11,7 @@ LL | / const MUTATING_BEHIND_RAW: () = {
|
||||
LL | | // Test that `MUTABLE_BEHIND_RAW` is actually immutable, by doing this at const time.
|
||||
LL | | unsafe {
|
||||
LL | | *MUTABLE_BEHIND_RAW = 99
|
||||
| | ^^^^^^^^^^^^^^^^^^^^^^^^ tried to modify constant memory
|
||||
| | ^^^^^^^^^^^^^^^^^^^^^^^^ writing to alloc1 which is read-only
|
||||
LL | | }
|
||||
LL | | };
|
||||
| |__-
|
||||
|
@ -26,7 +26,7 @@ error: any use of this value will cause an error
|
||||
LL | intrinsics::ptr_offset_from(self, origin)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| a memory access tried to interpret some bytes as a pointer
|
||||
| unable to turn these bytes into a pointer
|
||||
| inside call to `std::ptr::const_ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:28:14
|
||||
|
|
||||
::: $DIR/offset_from_ub.rs:26:1
|
||||
@ -81,7 +81,7 @@ error: any use of this value will cause an error
|
||||
LL | intrinsics::ptr_offset_from(self, origin)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| a memory access tried to interpret some bytes as a pointer
|
||||
| unable to turn these bytes into a pointer
|
||||
| inside call to `std::ptr::const_ptr::<impl *const u8>::offset_from` at $DIR/offset_from_ub.rs:49:14
|
||||
|
|
||||
::: $DIR/offset_from_ub.rs:45:1
|
||||
|
Loading…
Reference in New Issue
Block a user