You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix new correctness bugs found in a fresh lowering-passes audit
A follow-up static audit of LowerToAffineLoops.cpp, LowerToLLVM.cpp, and
the TypeScriptExceptionPass files (beyond the 10 findings already closed
in PRs #230/#232/#233/#234/#235) found and fixes 7 more confirmed bugs:
- SwitchStateOpLowering: generator yield/resume state labels were
collected into a SmallPtrSet<Operation*,16>, whose iteration order is
only insertion order below 16 entries; past that it silently falls back
to pointer-hash order, scrambling the positional switch dispatch used
by generator resume. Replaced with an order-preserving SmallVector.
- StringConcatOpLowering: the stack-allocation path sized its Alloca
using a pointer type instead of i8, over-allocating by sizeof(ptr) for
every multi-argument string concatenation (e.g. console.log with 2+
args).
- ArraySpliceOpLowering: mixed genuine MLIR index-dialect ops with
already-LLVM-converted operands, a type mismatch that made every
Array.prototype.splice() call fail to lower correctly (the only
.splice() call in the test suite was commented out because of this).
Reworked to stay consistently in the LLVM-converted domain, matching
every sibling array-mutation lowering.
- GlobalOpLowering: the side-effect enumeration deciding whether a global
initializer can be inlined as a constant vs. must run as a real
constructor was missing several ops with real side effects (array
push/unshift/splice/pop/shift, delete, set-length, string concat/
char-to-string).
- LandingPadFixPass: MadeChange was set unconditionally for every
landingpad visited, even when nothing was rewritten, causing needless
analysis invalidation on every EH-containing function on every compile.
- Win32ExceptionPass: the PHI-user removal loop erased only the first PHI
user found then unconditionally erased the underlying value, violating
LLVM's no-remaining-uses invariant when more than one PHI referenced the
same to-be-removed value (own TODO comment flagged this as incomplete).
- Win32ExceptionPass: getThrowFn's fallback path created a stray
_CxxThrowException Function without attaching it to the module.
Added 00array_splice.ts (JIT + AOT) covering shrink/grow/equal-size
splice cases, since this path had zero prior test coverage. Full ctest
suite green: 692/692.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0 commit comments