-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lowering: Don't mutate lambda in linearize
#57416
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work - Thanks for fixing my bug 🙂
Let's give @JeffBezanson a day to review, and merge this if there are no objections
There are conflicts now. |
e677990
to
cc397d8
Compare
BTW do you know if this also happens to fix #57153? That was bisected to the same commit, but may be a separate issue |
Tested, looks like a separate issue. |
Fixes #56904. The associated PR (#55876) compiles a finally block, then compiles a renumbered version of it. This works if `compile` doesn't mutate its input, but in reality, lambda bodies were being `set!` when linearized. The "invalid syntax" error was a result of attempting to linearize a lambda twice. (cherry picked from commit 414aca2)
Backported PRs: - [x] #57302 <!-- Add explicit imports for types and fix bugs --> - [x] #57420 <!-- Compiler: Fix check for IRShow definedness --> - [x] #57419 <!-- generated: Switch resolution module back to what it was before --> - [x] #57421 <!-- bpart: Skip implicit import reval if using'd export set is unchanged --> - [x] #57425 <!-- Prohibit binding replacement in closed modules during precompile --> - [x] #57426 <!-- Prohibit `import`ing or `using` Main during incremental compilation --> - [x] #57433 <!-- bpart: Track whether any binding replacement has happened in image modules --> - [x] #57445 <!-- Run all `--sysimage-native-code=no` cmdlineargs tests single-threaded --> - [x] #57386 <!-- Only strip invariant.load from special pointers --> - [x] #57453 <!-- Revert "Make emitted egal code more loopy (#54121)" --> - [x] #57389 <!-- Change memory indexing to use the type as index instead of i8 --> - [x] #57447 <!-- Don't return null pointer when asking for the type of a declared global --> - [x] #57467 <!-- using/import: ensure world update after each observable operation --> - [x] #57471 <!-- staticdata: Don't use `newm` pointer after it has been invalidated --> - [x] #57416 <!-- lowering: Don't mutate lambda in `linearize` -->
Fixes #56904.
The associated PR (#55876) compiles a finally block, then compiles a renumbered version of it. This works if
compile
doesn't mutate its input, but in reality, lambda bodies were beingset!
when linearized. The "invalid syntax" error was a result of attempting to linearize a lambda twice.