Skip to content

Make capture-by-ref unboxed closures work #17731

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

Closed
wants to merge 6 commits into from

Conversation

bkoropoff
Copy link
Contributor

This began as an attempt to fix an ICE in borrowck (issue #17655), but the rabbit hole went pretty deep. I ended up plumbing support for capture-by-reference unboxed closures all the way into trans.

Closes issue #17655.

…losures

This prevents a later ICE in borrowck.

Closes issue rust-lang#17655
In particular, this causes mutation of an upvar to correctly mark
it as mutable during adjustment.  This makes borrowck correctly
flag conflicting borrows, etc.

We still seem to generate incorrect code in trans which copies the upvar
by value into the closure.  This remains to be fixed.
Treat upvars of capture-by-reference unboxed closures as references
with appropriate regions and mutability.
Store references to the freevars instead of copies when constructing
the environment and insert an additional load when reading them from
the environment.
This test works as a regression test for issue rust-lang#17655.  It also
exercises mutation of by-ref upvars.
@huonw
Copy link
Member

huonw commented Oct 3, 2014

r? @pcwalton

@pcwalton
Copy link
Contributor

pcwalton commented Oct 3, 2014

This looks good. Could you add some tests for Fn and FnOnce closures as well? Thanks!

@bkoropoff
Copy link
Contributor Author

Added some more tests.

bors added a commit that referenced this pull request Oct 4, 2014
This began as an attempt to fix an ICE in borrowck (issue #17655), but the rabbit hole went pretty deep.  I ended up plumbing support for capture-by-reference unboxed closures all the way into trans.

Closes issue #17655.
@bors bors closed this Oct 4, 2014
lnicola pushed a commit to lnicola/rust that referenced this pull request Aug 13, 2024
perf: Segregate syntax and semantic diagnostics

Closes rust-lang#17731
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.

5 participants