Skip to content

fix(bb): unaligned SIMD store in pippenger_constantine tests to stop debug-build segfault#23847

Merged
iakovenkos merged 2 commits into
merge-train/barretenbergfrom
cb/fix-pippenger-constantine-simd-store-align
Jun 4, 2026
Merged

fix(bb): unaligned SIMD store in pippenger_constantine tests to stop debug-build segfault#23847
iakovenkos merged 2 commits into
merge-train/barretenbergfrom
cb/fix-pippenger-constantine-simd-store-align

Conversation

@AztecBot
Copy link
Copy Markdown
Collaborator

@AztecBot AztecBot commented Jun 4, 2026

Problem

The nightly barretenberg debug build has been failing (aztec-claude run 26935061960; same failure in aztec-packages runs #105/#106). The build dies with exit status 139 (SIGSEGV) on:

FAILED ... ecc_tests PippengerConstantine.SimdX4MatchesScalarPathLanewise (code: 139)
[ RUN      ] PippengerConstantine.SimdX4MatchesScalarPathLanewise
timeout: the monitored command dumped core

Root cause

In barretenberg/cpp/src/barretenberg/ecc/scalar_multiplication/pippenger_constantine.hpp, simd_u32x4_store writes the result vector with:

*reinterpret_cast<SimdU32x4*>(dst) = v;

SimdU32x4 is uint32_t __attribute__((vector_size(16))), which carries 16-byte alignment, so this is an aligned 128-bit store. But dst is an arbitrary uint32_t* — the test and fuzzer pass a stack std::array<uint32_t, 4> (4-byte aligned). At -O0 (debug) the store lowers to an alignment-requiring movaps/movdqa and faults whenever dst is not 16-byte aligned.

This only surfaces in the debug nightly: the helper is [[gnu::always_inline]], so at -O2 SROA promotes the local out array into registers and the memory store is elided — which is why the full (release) CI is green while the debug build segfaults.

The SIMD x4 helpers are currently consumed only by the unit test and fuzzer (not yet wired into the MSM hot loop), so the blast radius is the test/fuzzer.

Fix

Store via __builtin_memcpy, which has no alignment precondition and lowers to the intended unaligned movdqu / NEON st1 (the WASM wasm_v128_store path is unchanged). This matches the helper's documented intent.

Verification (red/green, debug preset)

Built ecc_tests with the debug CMake preset (build-debug, -O0 -D_GLIBCXX_DEBUG), matching the nightly:

  • Without the fix: PippengerConstantine.SimdX4MatchesScalarPathLanewise → exit 139 (SIGSEGV), reproducing the nightly.
  • With the fix: all 6 PippengerConstantine.* tests pass.

A standalone repro confirmed the mechanism independently: the aligned store to a 4-byte-aligned destination segfaults at -O0; the memcpy form stores correctly.


Created by claudebox · group: slackbot

@AztecBot AztecBot added ci-barretenberg Run all barretenberg/cpp checks. ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR. labels Jun 4, 2026
@iakovenkos iakovenkos changed the base branch from next to merge-train/barretenberg June 4, 2026 08:50
@iakovenkos iakovenkos self-requested a review June 4, 2026 08:50
@iakovenkos iakovenkos changed the title fix(bb): unaligned SIMD store in pippenger_constantine to stop debug-build segfault fix(bb): unaligned SIMD store in pippenger_constantine tests to stop debug-build segfault Jun 4, 2026
@iakovenkos iakovenkos marked this pull request as ready for review June 4, 2026 08:50
@iakovenkos iakovenkos enabled auto-merge (squash) June 4, 2026 08:51
@iakovenkos iakovenkos merged commit 394482a into merge-train/barretenberg Jun 4, 2026
27 of 32 checks passed
@iakovenkos iakovenkos deleted the cb/fix-pippenger-constantine-simd-store-align branch June 4, 2026 09:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-barretenberg Run all barretenberg/cpp checks. ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants