Skip to content

Sync to upstream/release/707#2222

Merged
hgoldstein merged 202 commits intomasterfrom
merge
Jan 30, 2026
Merged

Sync to upstream/release/707#2222
hgoldstein merged 202 commits intomasterfrom
merge

Conversation

@hgoldstein
Copy link
Contributor

@hgoldstein hgoldstein commented Jan 30, 2026

Hello Luaunators! This release comes with an API change for users of Luau.Require and some nice improvements for the bytecode compiler and native codegen!

Require Library

For users of Luau.Require's RequireNavigator: getRequirerIdentifier and reset have been merged into a single resetToRequirer API. This reflects existing usage, where the identifier returned by getRequirerIdentifier was always immediately passed to reset. The API surface is simpler, and this eliminates the artificial bottleneck of communicating requirer state via a std::string identifier.

Runtime

  • Inlining at bytecode compile time now retains information about builtin symbols, so FASTCALLs can be emitted when appropriate, such as in:
local function tryWithZero(f, x)
    return f(x, 0)
end

return function (n)
    -- If we inline `tryWithZero`, we'll be able to emit a
    -- FASTCALL opcode when compiling the now inlined 
    -- `math.max(n, 0)`
    return tryWithZero(math.max, n)
end
  • NCG: Fixed a crash resulting from partially eliminated dead store instructions: we would incidentally mark a floating point value as a potential pointer into the heap, which could crash during garbage collection.
  • NCG: Add vectorized instruction support for min, max, floor, ceil, and abs
  • NCG: Fixed a crash when constant folding a buffer access using an offset outside the representable range of integers.
  • Add support for constant folding vector component access at bytecode compile time.

Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Sora Kanosue skanosue@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

hgoldstein and others added 30 commits January 10, 2025 09:13
Note: Fixed conflicts by hand in:
- Analysis/src/ConstraintGenerator.cpp
- CodeGen/src/OptimizeConstProp.cpp
- VM/src/lmathlib.cpp
- tests/Conformance.test.cpp
a03c92095f6 #unflagged CLI-141149 Added lua_clonetable (#97902)
d66c43f36aa #flagged CLI-140903: Do not crash on duplicate keys in table literals (#97833)
8a2687f1690 #nonprod Luau: fix a test configuration issue breaking OSS CI. (#97878)
7add6d9dde9 #nojira CI-debugger revert #unflagged CLI-132461 Luau: refactor subtyping to also include the generic mapping it came up with. (#97872)
0c731fd3cc4 #flag-removal Clip `LuauNewSolverVisitErrorExprLvalues` (#96942)
2fe783b9615 #unflagged CLI-132461 Luau: refactor subtyping to also include the generic mapping it came up with. (#97803)
0cc41a0afae #unflagged CLI-141053 Luau buffer readbits/writebits implementation for big endian machines (#97826)
ae50bf04f99 #nonprod CLI-140027 Simplify require-by-string path resolution, fix bug when running CLI tools on unprefixed path (#97468)
77004599a6f #flag-removal Cleanup Luau VM and Compiler flags (#97799)
86777e269dd #flag-removal Remove LuauUserTypeFunPrintToError, LuauUserTypeFunNoExtraConstraint, LuauUserTypeFunUpdateAllEnvs, LuauUserTypeFunThreadBuffer and LuauUserTypeFunExportedAndLocal (#97624)
349b133fdc4 #nojira CI-debugger revert #unflagged CLI-132461 Luau: refactor subtyping to also include the generic mapping it came up with. (#97759)
2e820646ffa #flagged CLI-139615: Treat user defined type functions as opaque in eqSatSimplify (#96897)
c0845205e37 #flag-removal CLI-140688 Clean up `FFlagLuauIntersectNormalsNeedsToTrackResourceLimits` as `true`. (#97719)
3e07876a043 #flagged CLI-140571: Track interior free table types generated during constraint solving (#97498)
199b558dc36 #unflagged CLI-132461 Luau: refactor subtyping to also include the generic mapping it came up with. (#95646)
fd9255f62d3 #nonprod CLI-140762 unittest for fragment ac crash (#97669)
e9c710e017f #flag-removal FFlagLuauStoreCommentsForDefinitionFiles (#93359)
b184b940d55 CLI-140702 #unflagged Fix most clang-tidy warnings in TypeChecker2 (#97604)
1fc857f1bb3 CLI-140489 #unflagged Fix a potential hash collision bug in StringCache. (#97539)
58f62f900a2 #nonprod Some new unit testing macros for Luau tests. (#97336)
ab43a354b25 #flag-removal Remove LuauVectorMetatable and LuauVectorDefinitionsExtra (#97528)
c4c28694390 #flagged CLI-140485 Do not retain the Def/RefinementKey arenas when retainFullTypeGraphs is false (#97422)
This test fails due to a bad interaction when `FFlagLuauStoreCSTData` is
enabled, whilst `FFlagLexerFixInterpStringStart` is disabled.
The OSS test suite, when run with `--fflags=true`, enables all
flags starting with a `Luau` prefix, but does not enable any other flag.

To resolve this, we explicitly enable both fflags for the failing
interpolated string test cases. As a consequence, we technically lose
the check that these tests pass when all flags are disabled.
vegorov-rbx and others added 27 commits November 21, 2025 16:47
Hey folks! This release comes with an API change for users of `Luau.Require` and some nice improvements for the bytecode compiler _and_ native codegen!

For users of `Luau.Require`'s `RequireNavigator`: `getRequirerIdentifier` and `reset` have been merged into a single `resetToRequirer` API. This reflects existing usage, where the identifier returned by `getRequirerIdentifier` was always immediately passed to `reset`. The API surface is simpler, and this eliminates the artificial bottleneck of communicating requirer state via a `std::string` identifier.

* Inlining at bytecode compile time now retains information about builtin symbols, so `FASTCALL`s can be emitted when appropriate, such as in:
```luau
local function tryWithZero(f, x)
    return f(x, 0)
end

-- If we inline `tryWithZero`, we'll be able to emit a
-- FASTCALL opcode when calling `math.max(x, 0)`
return tryWithZero(math.max, 42)
```
* NCG: Fixed a crash resulting from partially eliminated dead store instructions: we would incidentally mark a floating point value as a potential pointer into the heap, which could crash during garbage collection.
* NCG: Add vectorized instruction support for `min`, `max`, `floor`, `ceil`, and `abs`
* NCG: Fixed a crash when constant folding a buffer access using an offset outside the representable range of integers.
* Add support for constant folding vector component access at bytecode compile time.

Co-authored-by: Andy Friesen <afriesen@roblox.com>
Co-authored-by: Sora Kanosue <skanosue@roblox.com>
Co-authored-by: Varun Saini <vsaini@roblox.com>
Co-authored-by: Vighnesh Vijay <vvijay@roblox.com>
Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
@hgoldstein hgoldstein marked this pull request as ready for review January 30, 2026 18:47
@hgoldstein hgoldstein merged commit 544d3ff into master Jan 30, 2026
8 checks passed
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.

9 participants