mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-06 20:28:33 +00:00
use CheckInAllocMsg::PointerArithmeticTest for ptr_offset error
This commit is contained in:
parent
d620ae1070
commit
abdba81d03
@ -306,6 +306,9 @@ impl fmt::Display for UndefinedBehaviorInfo<'_> {
|
|||||||
ptr.alloc_id,
|
ptr.alloc_id,
|
||||||
allocation_size.bytes()
|
allocation_size.bytes()
|
||||||
),
|
),
|
||||||
|
DanglingIntPointer(_, CheckInAllocMsg::InboundsTest) => {
|
||||||
|
write!(f, "null pointer is not allowed for this operation")
|
||||||
|
}
|
||||||
DanglingIntPointer(i, msg) => {
|
DanglingIntPointer(i, msg) => {
|
||||||
write!(f, "{} failed: 0x{:x} is not a valid pointer", msg, i)
|
write!(f, "{} failed: 0x{:x} is not a valid pointer", msg, i)
|
||||||
}
|
}
|
||||||
|
@ -526,7 +526,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
|||||||
min_ptr,
|
min_ptr,
|
||||||
Size::from_bytes(size),
|
Size::from_bytes(size),
|
||||||
None,
|
None,
|
||||||
CheckInAllocMsg::InboundsTest,
|
CheckInAllocMsg::PointerArithmeticTest,
|
||||||
)?;
|
)?;
|
||||||
Ok(offset_ptr)
|
Ok(offset_ptr)
|
||||||
}
|
}
|
||||||
|
@ -369,6 +369,7 @@ pub trait Machine<'mir, 'tcx>: Sized {
|
|||||||
) -> InterpResult<'tcx, Pointer<Self::PointerTag>> {
|
) -> InterpResult<'tcx, Pointer<Self::PointerTag>> {
|
||||||
Err((if int == 0 {
|
Err((if int == 0 {
|
||||||
// This is UB, seriously.
|
// This is UB, seriously.
|
||||||
|
// (`DanglingIntPointer` with these exact arguments has special printing code.)
|
||||||
err_ub!(DanglingIntPointer(0, CheckInAllocMsg::InboundsTest))
|
err_ub!(DanglingIntPointer(0, CheckInAllocMsg::InboundsTest))
|
||||||
} else {
|
} else {
|
||||||
// This is just something we cannot support during const-eval.
|
// This is just something we cannot support during const-eval.
|
||||||
|
@ -330,7 +330,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
|
|||||||
vtable,
|
vtable,
|
||||||
3 * self.ecx.tcx.data_layout.pointer_size, // drop, size, align
|
3 * self.ecx.tcx.data_layout.pointer_size, // drop, size, align
|
||||||
Some(self.ecx.tcx.data_layout.pointer_align.abi),
|
Some(self.ecx.tcx.data_layout.pointer_align.abi),
|
||||||
CheckInAllocMsg::InboundsTest,
|
CheckInAllocMsg::InboundsTest, // will anyway be replaced by validity message
|
||||||
),
|
),
|
||||||
self.path,
|
self.path,
|
||||||
err_ub!(DanglingIntPointer(..)) |
|
err_ub!(DanglingIntPointer(..)) |
|
||||||
@ -416,7 +416,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
|
|||||||
place.ptr,
|
place.ptr,
|
||||||
size,
|
size,
|
||||||
Some(align),
|
Some(align),
|
||||||
CheckInAllocMsg::InboundsTest,
|
CheckInAllocMsg::InboundsTest, // will anyway be replaced by validity message
|
||||||
),
|
),
|
||||||
self.path,
|
self.path,
|
||||||
err_ub!(AlignmentCheckFailed { required, has }) =>
|
err_ub!(AlignmentCheckFailed { required, has }) =>
|
||||||
|
@ -296,7 +296,7 @@ error[E0080]: could not evaluate static initializer
|
|||||||
--> $DIR/ub-wide-ptr.rs:135:5
|
--> $DIR/ub-wide-ptr.rs:135:5
|
||||||
|
|
|
|
||||||
LL | mem::transmute::<_, &dyn Trait>((&92u8, 0usize))
|
LL | mem::transmute::<_, &dyn Trait>((&92u8, 0usize))
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inbounds test failed: 0x0 is not a valid pointer
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ null pointer is not allowed for this operation
|
||||||
|
|
||||||
error[E0080]: could not evaluate static initializer
|
error[E0080]: could not evaluate static initializer
|
||||||
--> $DIR/ub-wide-ptr.rs:139:5
|
--> $DIR/ub-wide-ptr.rs:139:5
|
||||||
|
@ -74,7 +74,7 @@ error: any use of this value will cause an error
|
|||||||
LL | unsafe { intrinsics::ptr_offset_from(self, origin) }
|
LL | unsafe { intrinsics::ptr_offset_from(self, origin) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| inbounds test failed: 0x0 is not a valid pointer
|
| null pointer is not allowed for this operation
|
||||||
| inside `ptr::const_ptr::<impl *const u8>::offset_from` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
| inside `ptr::const_ptr::<impl *const u8>::offset_from` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||||
| inside `OFFSET_FROM_NULL` at $DIR/offset_from_ub.rs:36:14
|
| inside `OFFSET_FROM_NULL` at $DIR/offset_from_ub.rs:36:14
|
||||||
|
|
|
|
||||||
|
@ -23,7 +23,7 @@ error: any use of this value will cause an error
|
|||||||
LL | unsafe { intrinsics::offset(self, count) }
|
LL | unsafe { intrinsics::offset(self, count) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| inbounds test failed: pointer must be in-bounds at offset 2, but is outside bounds of allocN which has size 1
|
| pointer arithmetic failed: pointer must be in-bounds at offset 2, but is outside bounds of allocN which has size 1
|
||||||
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||||
| inside `AFTER_END` at $DIR/offset_ub.rs:7:43
|
| inside `AFTER_END` at $DIR/offset_ub.rs:7:43
|
||||||
|
|
|
|
||||||
@ -41,7 +41,7 @@ error: any use of this value will cause an error
|
|||||||
LL | unsafe { intrinsics::offset(self, count) }
|
LL | unsafe { intrinsics::offset(self, count) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| inbounds test failed: pointer must be in-bounds at offset 101, but is outside bounds of allocN which has size 100
|
| pointer arithmetic failed: pointer must be in-bounds at offset 101, but is outside bounds of allocN which has size 100
|
||||||
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||||
| inside `AFTER_ARRAY` at $DIR/offset_ub.rs:8:45
|
| inside `AFTER_ARRAY` at $DIR/offset_ub.rs:8:45
|
||||||
|
|
|
|
||||||
@ -131,7 +131,7 @@ error: any use of this value will cause an error
|
|||||||
LL | unsafe { intrinsics::offset(self, count) }
|
LL | unsafe { intrinsics::offset(self, count) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| inbounds test failed: pointer must be in-bounds at offset 1, but is outside bounds of allocN which has size 0
|
| pointer arithmetic failed: pointer must be in-bounds at offset 1, but is outside bounds of allocN which has size 0
|
||||||
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||||
| inside `ZERO_SIZED_ALLOC` at $DIR/offset_ub.rs:15:50
|
| inside `ZERO_SIZED_ALLOC` at $DIR/offset_ub.rs:15:50
|
||||||
|
|
|
|
||||||
@ -167,7 +167,7 @@ error: any use of this value will cause an error
|
|||||||
LL | unsafe { intrinsics::offset(self, count) }
|
LL | unsafe { intrinsics::offset(self, count) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| inbounds test failed: 0x0 is not a valid pointer
|
| pointer arithmetic failed: 0x0 is not a valid pointer
|
||||||
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
| inside `ptr::const_ptr::<impl *const u8>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||||
| inside `NULL_OFFSET_ZERO` at $DIR/offset_ub.rs:19:50
|
| inside `NULL_OFFSET_ZERO` at $DIR/offset_ub.rs:19:50
|
||||||
|
|
|
|
||||||
|
@ -4,7 +4,7 @@ error: any use of this value will cause an error
|
|||||||
LL | unsafe { intrinsics::offset(self, count) }
|
LL | unsafe { intrinsics::offset(self, count) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| inbounds test failed: pointer must be in-bounds at offset $TWO_WORDS, but is outside bounds of alloc2 which has size $WORD
|
| pointer arithmetic failed: pointer must be in-bounds at offset $TWO_WORDS, but is outside bounds of alloc2 which has size $WORD
|
||||||
| inside `ptr::const_ptr::<impl *const usize>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
| inside `ptr::const_ptr::<impl *const usize>::offset` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
||||||
| inside `_` at $DIR/ptr_comparisons.rs:61:34
|
| inside `_` at $DIR/ptr_comparisons.rs:61:34
|
||||||
|
|
|
|
||||||
|
Loading…
Reference in New Issue
Block a user