Skip to content

MIR-borrowck: identify cause of (and fix) extra "move out"/"assign to" errors signalled by mir-borrowck #44832

Closed
@pnkfelix

Description

@pnkfelix

There are many tests in compile-fail/borrowck/ that, in addition to signalling the errors that we already expect, also include a number of additional errors usually of the form "cannot move out of because it is borrowed.".

  • You can see list of such tests in the discrepancy spreadsheet.

  • Here is example output from an especially bad instance of the problem:

error[E0505]: cannot move out of `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:22:2
   |
22 | }
   |  ^

error[E0505]: cannot move out of `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:22:2
   |
22 | }
   |  ^

error[E0506]: cannot assign to `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:22:2
   |
22 | }
   |  ^

error[E0505]: cannot move out of `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:32:2
   |
32 | }
   |  ^

error[E0505]: cannot move out of `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:32:2
   |
32 | }
   |  ^

error[E0506]: cannot assign to `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:32:2
   |
32 | }
   |  ^

error[E0505]: cannot move out of `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:42:2
   |
42 | }
   |  ^

error[E0505]: cannot move out of `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:42:2
   |
42 | }
   |  ^

error[E0506]: cannot assign to `vec` because it is borrowed (Mir)
  --> ./src/test/compile-fail/borrowck/borrowck-vec-pattern-element-loan.rs:42:2
   |
42 | }
   |  ^

These errors often (perhaps always?) occur at the end of some lexical scope, so perhaps they are arising due to over-zealous handling of destructors, or StorageDead (or EndRegion)?

In any case, they represent a lot of extra noise and need to be dealt with.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-borrow-checkerArea: The borrow checkerC-bugCategory: This is a bug.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions