File tree Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Original file line number Diff line number Diff line change
1
+ // should find the bug even without these
2
+ // compile-flags: -Zmiri-disable-validation -Zmiri-disable-stacked-borrows
3
+
4
+ struct SliceWithHead ( u8 , [ u8 ] ) ;
5
+
6
+ fn main ( ) {
7
+ let buf = [ 0u32 ; 1 ] ;
8
+ // We craft a wide pointer `*const SliceWithHead` such that the unsized tail is only partially allocated.
9
+ // That should be UB, as the reference is not fully dereferencable.
10
+ let ptr: * const SliceWithHead = unsafe { std:: mem:: transmute ( ( & buf, 4usize ) ) } ;
11
+ // Re-borrow that. This should be UB.
12
+ let _ptr = unsafe { & * ptr } ; //~ ERROR pointer must be in-bounds at offset 5
13
+ }
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ fn main() {
12
12
// We craft a wide reference `&dyn Debug` with the vtable for `MuchAlign`. That should be UB,
13
13
// as the reference is not aligned to its dynamic alignment requirements.
14
14
let mut ptr = & MuchAlign as & dyn std:: fmt:: Debug ;
15
- // Overwrite the data part of `ptr`.
15
+ // Overwrite the data part of `ptr` so it points to `buf` .
16
16
unsafe { ( & mut ptr as * mut _ as * mut * const u8 ) . write ( & buf as * const _ as * const u8 ) ; }
17
17
// Re-borrow that. This should be UB.
18
18
let _ptr = & * ptr; //~ ERROR accessing memory with alignment 4, but alignment 256 is required
You can’t perform that action at this time.
0 commit comments