mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
Remove int2ptr cast in bevy_ptr::dangling_with_align
and remove -Zmiri-permissive-provenance
in CI (#15311)
# Objective - Remove an int2ptr cast in `bevy_ptr::dangling_with_align` - This is flagged by MIRI unless `-Zmiri-permissive-provenance` is used (like in CI) - Remove `-Zmiri-permissive-provenance` in CI ## Solution - Create the raw pointer like [`std::ptr::without_provenance`](https://doc.rust-lang.org/stable/std/ptr/fn.without_provenance_mut.html) does, i.e. by starting from a null pointer. --------- Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com> Co-authored-by: François Mockers <francois.mockers@vleue.com>
This commit is contained in:
parent
1b8c1c1242
commit
40b05b2116
2 changed files with 5 additions and 5 deletions
5
.github/workflows/ci.yml
vendored
5
.github/workflows/ci.yml
vendored
|
@ -92,16 +92,15 @@ jobs:
|
||||||
components: miri
|
components: miri
|
||||||
- name: CI job
|
- name: CI job
|
||||||
# To run the tests one item at a time for troubleshooting, use
|
# To run the tests one item at a time for troubleshooting, use
|
||||||
# cargo --quiet test --lib -- --list | sed 's/: test$//' | MIRIFLAGS="-Zmiri-disable-isolation -Zmiri-permissive-provenance -Zmiri-disable-weak-memory-emulation" xargs -n1 cargo miri test -p bevy_ecs --lib -- --exact
|
# cargo --quiet test --lib -- --list | sed 's/: test$//' | MIRIFLAGS="-Zmiri-disable-isolation -Zmiri-disable-weak-memory-emulation" xargs -n1 cargo miri test -p bevy_ecs --lib -- --exact
|
||||||
run: cargo miri test -p bevy_ecs
|
run: cargo miri test -p bevy_ecs
|
||||||
env:
|
env:
|
||||||
# -Zrandomize-layout makes sure we dont rely on the layout of anything that might change
|
# -Zrandomize-layout makes sure we dont rely on the layout of anything that might change
|
||||||
RUSTFLAGS: -Zrandomize-layout
|
RUSTFLAGS: -Zrandomize-layout
|
||||||
# https://github.com/rust-lang/miri#miri--z-flags-and-environment-variables
|
# https://github.com/rust-lang/miri#miri--z-flags-and-environment-variables
|
||||||
# -Zmiri-disable-isolation is needed because our executor uses `fastrand` which accesses system time.
|
# -Zmiri-disable-isolation is needed because our executor uses `fastrand` which accesses system time.
|
||||||
# -Zmiri-permissive-provenance disables warnings against int2ptr casts (since those are used by once_cell)
|
|
||||||
# -Zmiri-ignore-leaks is necessary because a bunch of tests don't join all threads before finishing.
|
# -Zmiri-ignore-leaks is necessary because a bunch of tests don't join all threads before finishing.
|
||||||
MIRIFLAGS: -Zmiri-ignore-leaks -Zmiri-disable-isolation -Zmiri-permissive-provenance
|
MIRIFLAGS: -Zmiri-ignore-leaks -Zmiri-disable-isolation
|
||||||
|
|
||||||
check-compiles:
|
check-compiles:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
@ -13,7 +13,7 @@ use core::{
|
||||||
marker::PhantomData,
|
marker::PhantomData,
|
||||||
mem::ManuallyDrop,
|
mem::ManuallyDrop,
|
||||||
num::NonZeroUsize,
|
num::NonZeroUsize,
|
||||||
ptr::NonNull,
|
ptr::{self, NonNull},
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Used as a type argument to [`Ptr`], [`PtrMut`] and [`OwningPtr`] to specify that the pointer is aligned.
|
/// Used as a type argument to [`Ptr`], [`PtrMut`] and [`OwningPtr`] to specify that the pointer is aligned.
|
||||||
|
@ -539,7 +539,8 @@ pub const fn dangling_with_align(align: NonZeroUsize) -> NonNull<u8> {
|
||||||
debug_assert!(align.is_power_of_two(), "Alignment must be power of two.");
|
debug_assert!(align.is_power_of_two(), "Alignment must be power of two.");
|
||||||
// SAFETY: The pointer will not be null, since it was created
|
// SAFETY: The pointer will not be null, since it was created
|
||||||
// from the address of a `NonZero<usize>`.
|
// from the address of a `NonZero<usize>`.
|
||||||
unsafe { NonNull::new_unchecked(align.get() as *mut u8) }
|
// TODO: use https://doc.rust-lang.org/std/ptr/struct.NonNull.html#method.with_addr once stabilised
|
||||||
|
unsafe { NonNull::new_unchecked(ptr::null_mut::<u8>().wrapping_add(align.get())) }
|
||||||
}
|
}
|
||||||
|
|
||||||
mod private {
|
mod private {
|
||||||
|
|
Loading…
Reference in a new issue