mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-04 10:48:20 +00:00
fix(msan): shard the lane one suite per process, origins default 1
With the zstd feature-macro fix in, the x86-64 leg finally RUNS -- and thousands of tests pass before the known deep-recursion stack overflow lands in grammar_regression, the same signature as the local arm64 wall. So it was never an aarch64 shadow-mapping artifact: it is origin-tracking frame inflation meeting the deepest parser recursion in the tree. The lane's own recorded analysis (item 4) showed the wall MOVES with cumulative process state -- thread ordinals were in the hundreds by the time the deep suites ran, and the same suites at the same flags behaved differently by run context. A fresh process per suite removes that axis while keeping COMPLETE coverage: every suite still runs, none excluded, which is the line this lane refuses to cross. Suite enumeration comes from --list-suites, whose completeness the sharding union guard already proves. Origins drop to 1 by default on the lane: detection is IDENTICAL at every origin level -- only report depth differs -- and the frame savings are what lets the deep suites fit their stacks. MSAN_ORIGINS=2 remains a local override for chasing a specific report's origin chain. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
This commit is contained in:
1 parent
f07c2e2f34
commit
bc3cc3f49f
1 file changed
+20
-2
+20
-2
@@ -35,7 +35,11 @@ fi
|
||||
# 1 = immediate origin only, 0 = none. Detection is IDENTICAL at every level;
|
||||
# only report quality differs, so lowering it is the first lever to try when
|
||||
# frame inflation overflows a deep-recursion suite.
|
||||
MSAN_ORIGINS="${MSAN_ORIGINS:-2}"
|
||||
# Default 1 on this lane: identical DETECTION at every level (only report
|
||||
# depth differs), and the frame savings are what lets the deep-recursion
|
||||
# grammar suites fit their stacks under instrumentation. Export
|
||||
# MSAN_ORIGINS=2 locally when chasing a specific report's origin chain.
|
||||
MSAN_ORIGINS="${MSAN_ORIGINS:-1}"
|
||||
if [ "$MSAN_ORIGINS" = "0" ]; then
|
||||
MSAN_ORIGIN_FLAG=""
|
||||
else
|
||||
@@ -130,7 +134,21 @@ MSAN_EXCLUDE="${MSAN_EXCLUDE:-}"
|
||||
if [ "$#" -gt 0 ]; then
|
||||
./build/msan/test-runner "$@"
|
||||
elif [ -z "$MSAN_EXCLUDE" ]; then
|
||||
./build/msan/test-runner
|
||||
# One suite per process. Item 4 above proved the overflow wall moves with
|
||||
# CUMULATIVE process state (thread ordinals in the hundreds by the time
|
||||
# the deep suites run), so a fresh process per suite removes that axis
|
||||
# while keeping COMPLETE coverage — every suite still runs, uninstrumented
|
||||
# none. The union of --list-suites is proven complete by the sharding
|
||||
# guard from the per-leg parallelism work (#1164).
|
||||
fails=""
|
||||
for suite in $(./build/msan/test-runner --list-suites); do
|
||||
echo "=== msan: $suite ==="
|
||||
./build/msan/test-runner "$suite" || fails="$fails $suite"
|
||||
done
|
||||
if [ -n "$fails" ]; then
|
||||
echo "=== MSan lane FAILED suites:$fails ===" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "WARNING: running a PARTIAL sanitizer lane — excluded: $MSAN_EXCLUDE" >&2
|
||||
echo "WARNING: a green result here does NOT mean the tree is MSan-clean." >&2
|
||||
|
||||
Reference in new issue
Block a user