librustc: deny(elided_lifetimes_in_paths)
As part of the Rust 2018 transition, remove `#![allow(elided_lifetimes_in_paths)]` from `librustc`.
r? @oli-obk
librustc_typeck: deny(elided_lifetimes_in_paths)
As part of the Rust 2018 transition, remove `#![allow(elided_lifetimes_in_paths)]` from `librustc_typeck`.
r? @oli-obk
librustc_codegen_ssa: #![deny(elided_lifetimes_in_paths)]
As part of the Rust 2018 transition, remove `#![allow(elided_lifetimes_in_paths)]` from `librustc_codegen_ssa`.
r? @oli-obk
librustc_codegen_llvm: #![deny(elided_lifetimes_in_paths)]
As part of the Rust 2018 transition, remove `#![allow(elided_lifetimes_in_paths)]` from `librustc_codegen_llvm`.
r? @oli-obk
Deny the `overflowing_literals` lint for all editions
The `overflowing_literals` was made deny by default for the 2018 edition by #54507, however I'm not aware of any reason it can't be made deny by default for the 2015 edition as well.
Use normal mutable borrows in matches
`ref mut` borrows are currently two-phase with NLL enabled. This changes them to be proper mutable borrows. To accommodate this, first the position of fake borrows is changed:
```text
[ 1. Pre-match ]
|
[ (old create fake borrows) ]
[ 2. Discriminant testing -- check discriminants ] <-+
| |
| (once a specific arm is chosen) |
| |
[ (old read fake borrows) ] |
[ 3. Create "guard bindings" for arm ] |
[ (create fake borrows) ] |
| |
[ 4. Execute guard code ] |
[ (read fake borrows) ] --(guard is false)-----------+
|
| (guard results in true)
|
[ 5. Create real bindings and execute arm ]
|
[ Exit match ]
```
The following additional changes are made to accommodate `ref mut` bindings:
* We no longer create fake `Shared` borrows. These borrows are no longer needed for soundness, just to avoid some arguably strange cases.
* `Shallow` borrows no longer conflict with existing borrows, avoiding conflicting access between the guard borrow access and the `ref mut` borrow.
There is some further clean up done in this PR:
* Avoid the "later used here" note for Shallow borrows (since it's not relevant with the message provided)
* Make any use of a two-phase borrow activate it.
* Simplify the cleanup_post_borrowck passes into a single pass.
cc #56254
r? @nikomatsakis
Rollup of 5 pull requests
Successful merges:
- #58370 (Relax some Hash bounds on HashMap<K, V, S> and HashSet<T, S>)
- #58421 (Relax some Ord bounds on BinaryHeap<T>)
- #58686 (replace deprecated rustfmt_skip with rustfmt::skip)
- #58697 (Use ? in some macros)
- #58704 (Remove some unnecessary 'extern crate')
Failed merges:
r? @ghost