- CustomPasses.hpp: move stackMemory declaration inside the per-function
loop so each function gets its own alloca with correct size and
ownership. Previously dormant (single-function modules) but wrong.
- verify_plan.py: rename _build_plan -> build_plan, _run_plan -> run_plan.
These are used cross-module by run_review.py and should be public API.
- run_review.py: update callers to use the renamed public functions.
- FileReader.hpp: add fprintf(stderr) diagnostic before silent return 0
on byteSize > 8 (wide SSE/AVX loads). Uses fprintf instead of
printvalue2 to avoid cross-layer dependency (memory -> core).
PathSolver.ipp:
- Remove 'static' from try_simplify lambda that captured [&] references
from first invocation only (use-after-free on subsequent calls)
- Guard cast<Instruction>(condition) with dyn_cast — createICMPFolder
can return a ConstantInt, crashing the assert in cast<>
- Add pv.empty() handler that emits CreateUnreachable() instead of
leaving the basic block unterminated (LLVM verifier failure)
- Return PATH_multi_solved (not PATH_unsolved) after successful
SwitchInst emission for >2 targets
FileReader.hpp:
- Add byteSize > sizeof(uint64_t) guard in both readMemory_impl
variants to prevent stack buffer overflow on SSE/AVX-width reads
GEPTracker.ipp:
- Restructure retrieveCombinedValue to check v.isRef before accessing
v.memoryAddress in the union — reading the inactive union member
is undefined behavior