Fix JIT memory manager alignment bug causing multi-thread heap corruption
CPUDriverJITMemoryManager::allocate() aligned each exec/data region's base offset to the alignment of only the first block encountered, while the per-block size accumulation padded relative offsets using each block's own (possibly larger) alignment. When a later block required a stricter alignment than the first, the reserved totalSize under-counted the real placement needs, letting the last block(s) of a region spill past the reserved slab range into memory concurrently claimed by another JIT-compiling thread.
This produced widespread heap corruption under the default 4-thread JIT compilation, manifesting as misaligned-pointer assertions and garbled/duplicated/truncated icgrep output (59 of 296 greptest cases failing). Tracking the maximum block alignment per region and using that to align the base offset fixes the mismatch (down to 6 failures, caused by a separate, still-open race).
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com