Skip to content

Instantly share code, notes, and snippets.

@pepyakin
Created April 24, 2020 16:31
Show Gist options
  • Select an option

  • Save pepyakin/8c11a0f3edcb21206c4019c28faa4753 to your computer and use it in GitHub Desktop.

Select an option

Save pepyakin/8c11a0f3edcb21206c4019c28faa4753 to your computer and use it in GitHub Desktop.

Revisions

  1. pepyakin created this gist Apr 24, 2020.
    36 changes: 36 additions & 0 deletions miri-shenanigans.rs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    use std::cell::UnsafeCell;

    #[test]
    fn evil() {
    let array: [u8; 2] = [b'A', b'B'];
    let array = UnsafeCell::new(array);

    let (_loaded_a, _loaded_b) = unsafe {
    let a = &mut *{
    let cached_entries = &mut *array.get();
    &mut cached_entries[0]
    };
    let b = &mut *{
    let cached_entries = &mut *array.get();
    &mut cached_entries[1]
    };
    (a, b)
    };
    }

    #[test]
    fn saint() {
    let array: [u8; 2] = [b'A', b'B'];
    let array = UnsafeCell::new(array);

    unsafe {
    let _loaded_a = &mut *{
    let cached_entries = &mut *array.get();
    &mut cached_entries[0]
    };
    let _loaded_b = &mut *{
    let cached_entries = &mut *array.get();
    &mut cached_entries[1]
    };
    }
    }