Skip to content

fix(simd): avoid misaligned typed stores in partial vint4/vfloat4 stores - #5566

Open
lgritz wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
lgritz:lg-align
Open

lgritz wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
lgritz:lg-align

Conversation

@lgritz

@lgritz lgritz commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

vint4::store(unsigned char*) wrote its 4 packed bytes via _mm_store_ss((float*)values), and several other partial stores cast to double*. The destination is often not aligned to that type (e.g. convert_type chunk boundaries with --threads 3), which is UB. GCC's intrinsic headers implement these as plain typed stores, so UBSan reports "store to misaligned address".

Use memcpy (4-byte) or _mm_storel_epi64 (8-byte), which are alignment-agnostic and compile to the same movss/movlps. Also fix the NEON uint32_t* cast for consistency.

Add simd_test coverage that stores to element-aligned but not SIMD-store-aligned addresses; fails under UBSan with GCC on x86 without this fix.

Fixes #5560

Assisted-by: Claude Code / Claude Opus 5.5

vint4::store(unsigned char*) wrote its 4 packed bytes via
_mm_store_ss((float*)values), and several other partial stores cast to
double*. The destination is often not aligned to that type (e.g.
convert_type chunk boundaries with --threads 3), which is UB. GCC's
intrinsic headers implement these as plain typed stores, so UBSan
reports "store to misaligned address".

Use memcpy (4-byte) or _mm_storel_epi64 (8-byte), which are
alignment-agnostic and compile to the same movss/movlps. Also fix the
NEON uint32_t* cast for consistency.

Add simd_test coverage that stores to element-aligned but not
SIMD-store-aligned addresses; fails under UBSan with GCC on x86
without this fix.

Fixes AcademySoftwareFoundation#5560

Assisted-by: Claude Code / Claude Opus 5.5

Signed-off-by: Larry Gritz <lg@larrygritz.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

sanitizer: UBSan reports "runtime error: store to misaligned address" on SIMD SSE with particular number of threads

1 participant