diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 60184f7..285b04b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -46,14 +46,17 @@ jobs: run: cargo test miri: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: - targets: x86_64-unknown-linux-gnu - components: miri + components: miri,rust-src toolchain: nightly - uses: actions/setup-node@v5 with: diff --git a/src/simd/avx512.rs b/src/simd/avx512.rs index 316edd2..a1ac242 100644 --- a/src/simd/avx512.rs +++ b/src/simd/avx512.rs @@ -211,8 +211,9 @@ pub unsafe fn format_string(value: &str, dst: &mut [u8]) -> usize { // Handle remaining bytes let mut placeholder: [u8; LANES] = [0; LANES]; + let mut v; while nb > 0 { - let v = { + v = { #[cfg(not(any(target_os = "linux", target_os = "macos")))] { std::ptr::copy_nonoverlapping(sptr, placeholder[..].as_mut_ptr(), nb); @@ -237,7 +238,7 @@ pub unsafe fn format_string(value: &str, dst: &mut [u8]) -> usize { } }; - v.storeu(dptr); + v.storeu(std::slice::from_raw_parts_mut(dptr, LANES).as_mut_ptr()); let mask = escaped_mask(v).clear_high_bits(LANES - nb); if mask.all_zero() {