From 8db518a3be86194a74c14ba56b9cf14d422b04f0 Mon Sep 17 00:00:00 2001 From: Yuansheng Wang Date: Tue, 2 Jun 2026 08:29:48 +0800 Subject: [PATCH] test: add 32-bit architecture Miri validation (#147) Add i686-unknown-linux-gnu target to the Miri test matrix in CI to validate 32-bit safety of pointer/offset handling. - Install i686 target alongside x86_64 in sanitizers job - Run all FFI tests (ffi_smoke, ffi_cursor, ffi_strings, ffi_ops_interleave) on both architectures - Rename existing Miri step to clarify it targets x86_64 This aligns with serde_json's QA practices and catches potential issues with usize/u32 conversions, offset arithmetic overflow, and FFI memory layout on 32-bit platforms. Closes #147 --- .github/workflows/ci.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 07b6f7e..74ddb29 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -321,7 +321,7 @@ jobs: - name: Install Rust (nightly) run: | rustup toolchain install nightly --profile minimal --no-self-update - rustup +nightly target add x86_64-unknown-linux-gnu + rustup +nightly target add x86_64-unknown-linux-gnu i686-unknown-linux-gnu rustup +nightly component add miri - name: Cache cargo registry & target @@ -335,13 +335,20 @@ jobs: restore-keys: | sanitizers-${{ runner.os }}-${{ runner.arch }}- - - name: Miri FFI tests (scalar scanner) + - name: Miri FFI tests x86_64 (scalar scanner) run: | cargo +nightly miri test --target x86_64-unknown-linux-gnu --no-default-features --test ffi_smoke cargo +nightly miri test --target x86_64-unknown-linux-gnu --no-default-features --test ffi_cursor cargo +nightly miri test --target x86_64-unknown-linux-gnu --no-default-features --test ffi_strings cargo +nightly miri test --target x86_64-unknown-linux-gnu --no-default-features --test ffi_ops_interleave + - name: Miri FFI tests i686 (32-bit validation) + run: | + cargo +nightly miri test --target i686-unknown-linux-gnu --no-default-features --test ffi_smoke + cargo +nightly miri test --target i686-unknown-linux-gnu --no-default-features --test ffi_cursor + cargo +nightly miri test --target i686-unknown-linux-gnu --no-default-features --test ffi_strings + cargo +nightly miri test --target i686-unknown-linux-gnu --no-default-features --test ffi_ops_interleave + - name: ASan FFI smoke tests continue-on-error: true env: