Skip to content

Commit c9e9916

Browse files
committed
offset, offset_from: allow zero-byte offset on arbitrary pointers
1 parent 66a2bba commit c9e9916

28 files changed

+64
-327
lines changed

tests/fail/dangling_pointers/dangling_zst_deref.rs

-10
This file was deleted.

tests/fail/dangling_pointers/dangling_zst_deref.stderr

-25
This file was deleted.

tests/fail/dangling_pointers/maybe_null_pointer_deref_zst.rs

-5
This file was deleted.

tests/fail/dangling_pointers/maybe_null_pointer_deref_zst.stderr

-15
This file was deleted.

tests/fail/dangling_pointers/maybe_null_pointer_write_zst.rs

-8
This file was deleted.

tests/fail/dangling_pointers/maybe_null_pointer_write_zst.stderr

-15
This file was deleted.

tests/fail/dangling_pointers/null_pointer_deref_zst.rs

-5
This file was deleted.

tests/fail/dangling_pointers/null_pointer_deref_zst.stderr

-15
This file was deleted.

tests/fail/dangling_pointers/null_pointer_write_zst.rs

-8
This file was deleted.

tests/fail/dangling_pointers/null_pointer_write_zst.stderr

-15
This file was deleted.

tests/fail/intrinsics/copy_null.rs

-15
This file was deleted.

tests/fail/intrinsics/copy_null.stderr

-15
This file was deleted.

tests/fail/intrinsics/ptr_offset_0_plus_0.rs

-9
This file was deleted.

tests/fail/intrinsics/ptr_offset_0_plus_0.stderr

-15
This file was deleted.

tests/fail/intrinsics/ptr_offset_from_oob.rs

-7
This file was deleted.

tests/fail/intrinsics/ptr_offset_from_oob.stderr

-15
This file was deleted.

tests/fail/intrinsics/ptr_offset_ptr_plus_0.rs

-7
This file was deleted.

tests/fail/intrinsics/ptr_offset_ptr_plus_0.stderr

-20
This file was deleted.

tests/fail/intrinsics/write_bytes_null.rs

-10
This file was deleted.

tests/fail/intrinsics/write_bytes_null.stderr

-15
This file was deleted.

tests/fail/zst2.rs

-12
This file was deleted.

tests/fail/zst2.stderr

-25
This file was deleted.

tests/fail/zst3.rs

-15
This file was deleted.

tests/fail/zst3.stderr

-20
This file was deleted.
File renamed without changes.

tests/fail/zst1.stderr renamed to tests/fail/zst_local_oob.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
error: Undefined Behavior: memory access failed: ALLOC has size 0, so pointer to 1 byte starting at offset 0 is out-of-bounds
2-
--> $DIR/zst1.rs:LL:CC
2+
--> $DIR/zst_local_oob.rs:LL:CC
33
|
44
LL | let _val = unsafe { *x };
55
| ^^ memory access failed: ALLOC has size 0, so pointer to 1 byte starting at offset 0 is out-of-bounds
66
|
77
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
88
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
99
= note: BACKTRACE:
10-
= note: inside `main` at $DIR/zst1.rs:LL:CC
10+
= note: inside `main` at $DIR/zst_local_oob.rs:LL:CC
1111

1212
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
1313

tests/pass/align_offset_symbolic.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,9 @@ fn vtable() {
118118
let parts: (*const (), *const u8) = unsafe { mem::transmute(ptr) };
119119
let vtable = parts.1;
120120
let offset = vtable.align_offset(mem::align_of::<TWOPTR>());
121-
let _vtable_aligned = vtable.wrapping_add(offset) as *const [TWOPTR; 0];
122-
// FIXME: we can't actually do the access since vtable pointers act like zero-sized allocations.
123-
// Enable the next line once https://github.com/rust-lang/rust/issues/117945 is implemented.
124-
//let _place = unsafe { &*vtable_aligned };
121+
let vtable_aligned = vtable.wrapping_add(offset) as *const [TWOPTR; 0];
122+
// Zero-sized deref, so no in-bounds requirement.
123+
let _place = unsafe { &*vtable_aligned };
125124
}
126125

127126
fn main() {

0 commit comments

Comments
 (0)