Closed
Description
Part of: #43234
The MIR-based borrow checker used by NLL fixes a number of bugs in the existing AST-based borrow checker. Our plan for these bugs is to fix them by transitioning to the MIR-based borrow checker. In the meantime, we wish to add tests that show that the bugs are fixed with NLL, and then close the bugs (so they don't clutter up the issue tracker). This issue tracks the set of such bugs and gives instructions for how to proceed.
Bugs fixed by MIR
All these bugs are confirmed as fixed; the checkmark indicates that a PR with a test is enqueued or landed.
- Compiler accepts return mut ref to local var on no longer valid stackframe #46557
- borrowed referent of a
&T
sometimes incorrectly allowed #38899 - binding-less matches on borrowed data are incorrectly allowed #45045 (using example from this comment)
- Broken move semantics in
decl_macro
#46314 - What are the semantics of '#[thread_local] static ...' without 'mut'? #47053 (PR Properly pass down immutability info for thread-locals. #47425)
- tracking issue for bugs fixed by the MIR borrow checker or NLL #47366 (examples from [this comment])
- Lifetime bounds in Copy impls are ignored #29149 (fix in Do not ignore lifetime bounds in Copy impls #47877)
- Incorrect partially moved value error check when pattern matching boxed structures. #16223
- nll rejects this code #48238 (and specifically this reduction)
- Borrow checker unsoundness with unions #45157
- Broken move semantics in
decl_macro
#46314 (hygiene interaction) - Inconsistent evaluation order for assignment operations #27868 -- evaluation order and operators
- Incorrect partially moved value error check when pattern matching boxed structures. #16223 -- incorrect partially moved value error check
Procedure
- First, if you wish, add yourself to the list of participants for the WG-compiler-nll working group.
- This will help us to find people who might like to help later!
- Create a regression test in
src/test/ui/nll/
- The name can be
issue-XXX.rs
, though giving a more descriptive name is also good - The file should include a comment saying
// Regression test for #XXX
however to ease searching later
- The name can be
- This test should include the error from the bug along with the following header material:
- Rust license
#![feature(nll)]
at the top- comments like
//~ ERROR
for the errors, or whatever is needed for test harness to pass
- Run
./x.py test --stage 1 src/test/ui --test-args nll
, this will test all the nll tests (including yours) - Presuming that passes, open a PR! Otherwise, stop in at the WG-compiler-nll gitter channel
- Put
r? @nikomatsakis
in the PR summary
- Put
Metadata
Metadata
Assignees
Labels
Area: Non-lexical lifetimes (NLL)Category: This is a bug.Category: An issue tracking the progress of sth. like the implementation of an RFCCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.Relevant to the compiler team, which will review and decide on the PR/issue.Bugs fixed, but only when NLL is enabled.