---
tags: dev-guide, rustc
---
# Rustc Dev Guide WG - Set of PRs that help understanding the compiler
- [[WIP] Implement a "place unification" MIR optimization (aka source/destination propagation aka NRVO). #47954](https://github.com/rust-lang/rust/pull/47954)
- [rustc_mir: add a pass for fragmenting locals into their fields (aka SROA). #48300](https://github.com/rust-lang/rust/pull/48300)
- [Decouple proc_macro from the rest of the compiler. #49219](https://github.com/rust-lang/rust/pull/49219)
- [Prevent compiler stack overflow for deeply recursive code #55617](https://github.com/rust-lang/rust/pull/55617)
- [rustc: move debug info from LocalDecl and UpvarDecl into a dedicated VarDebugInfo. #56231](https://github.com/rust-lang/rust/pull/56231)
- [Implement RFC 2532 – Associated Type Defaults #61812](https://github.com/rust-lang/rust/pull/61812)
- [[mir-opt] asking `?`s in a more optimized fashion #66282](https://github.com/rust-lang/rust/pull/66282)
- [Add unreachable propagation mir optimization pass #66329](https://github.com/rust-lang/rust/pull/66329)
- [Create promoted MIR fragments for `const` and `static`s #66642](https://github.com/rust-lang/rust/pull/66642)
- [Allocate HIR on an arena 1/4 #66931](https://github.com/rust-lang/rust/pull/66931)
- [Allocate HIR on an arena 2/4 -- Expr & Pat #66936](https://github.com/rust-lang/rust/pull/66936)
- [Allocate HIR on an arena 3/4 -- Ty #66942](https://github.com/rust-lang/rust/pull/66942)
- [refactor expr & stmt parsing + improve recovery #66994](https://github.com/rust-lang/rust/pull/66994)
- [Allocate HIR on an arena 4/4 #67032](https://github.com/rust-lang/rust/pull/67032)
- [Refactor expression parsing thoroughly #67112](https://github.com/rust-lang/rust/pull/67112)
- [Const prop should finish propagation into user defined variables #67130](https://github.com/rust-lang/rust/pull/67130)
- [Merge `TraitItem` & `ImplItem into `AssocItem` #67131](https://github.com/rust-lang/rust/pull/67131)
- [Ensure that we get a hard error on generic ZST constants if their bod… #67134](https://github.com/rust-lang/rust/pull/67134)
- [Various const eval and pattern matching ICE fixes #67192](https://github.com/rust-lang/rust/pull/67192)
- [[mir-opt] Fix `Inline` pass to handle inlining into `box` expressions #67333](https://github.com/rust-lang/rust/pull/67333)
- [Communicate over stderr jobserver token acquiring/releasing #67398](https://github.com/rust-lang/rust/pull/67398)
- [Reduce special treatment for zsts #67501](https://github.com/rust-lang/rust/pull/67501)
- [Treat extern statics just like statics in the "const pointer to static" representation #67630](https://github.com/rust-lang/rust/pull/67630)
- [Fix `Instance::resolve()` incorrectly returning specialized instances #67662](https://github.com/rust-lang/rust/pull/67662)
- [Implement MIR lowering for or-patterns #67668](https://github.com/rust-lang/rust/pull/67668)
- [Lint overflowing integer casts in const prop #67676](https://github.com/rust-lang/rust/pull/67676)
- [Stabilize `#![feature(slice_patterns)]` in 1.42.0 #67712](https://github.com/rust-lang/rust/pull/67712)
- How to stabilize a feature-gated feature
- [Update to LLVM 10 #67759](https://github.com/rust-lang/rust/pull/67759)
- [Extract `rustc_hir` out of `rustc` #67803](https://github.com/rust-lang/rust/pull/67803)
- [Parallel tweaks #67870](https://github.com/rust-lang/rust/pull/67870)
- [Lazy normalization of constants #67890](https://github.com/rust-lang/rust/pull/67890)
- [Ensure all iterations in Rayon iterators run in the presence of panics #68171](https://github.com/rust-lang/rust/pull/68171)
- [Migrate borrowck dataflow impls to new framework #68241](https://github.com/rust-lang/rust/pull/68241)
- [rustc_span: return an impl Iterator instead of a Vec from macro_backtrace. #68407](https://github.com/rust-lang/rust/pull/68407)
- [Mark other variants as uninitialized after switch on discriminant #68528](https://github.com/rust-lang/rust/pull/68528)
- [rustc_codegen_ssa: don't treat inlined variables as debuginfo arguments. #68802](https://github.com/rust-lang/rust/pull/68802)
- [Prevent query cycles in the MIR inliner #68828](https://github.com/rust-lang/rust/pull/68828)
- [rustc_codegen_ssa: only "spill" SSA-like values to the stack for debuginfo. #68961](https://github.com/rust-lang/rust/pull/68961)
- [rustc_mir: track inlined callees in SourceScopeData. #68965](https://github.com/rust-lang/rust/pull/68965)
- [Use queries for the HIR map #68944](https://github.com/rust-lang/rust/pull/68944)
- [rustc: don't resolve Instances which would produce malformed shims. #69036](https://github.com/rust-lang/rust/pull/69036)
- [Preparation for allocator aware `Box` #69058](https://github.com/rust-lang/rust/pull/69058)
- [NRVO pass for acyclic CFGs](https://github.com/rust-lang/rust/pull/71003)
- [Use existing framework for backward dataflow analyses #71006](https://github.com/rust-lang/rust/pull/71006)
- [Const prop aggregates even if partially or fully modified #71953](https://github.com/rust-lang/rust/pull/71953)
- [Dumb NRVO](https://github.com/rust-lang/rust/pull/72205)
- [Implement a generic Destination Propagation optimization on MIR](https://github.com/rust-lang/rust/pull/72632)
- [Refactor the partitioning module to make it easier to introduce new algorithms](https://github.com/rust-lang/rust/pull/74275)
- [I can't stop writing copy propagation passes](https://github.com/rust-lang/rust/pull/76723)
- [Forbid `Pineapple` on `Pizza`](https://github.com/rust-lang/rust/pull/70645/files)
- How to add a new lint
- [Implement `?` macro repetition](https://github.com/rust-lang/rust/pull/47752)
- Modifying the Macro-by-example parser
- [Make anon params lint warn-by-default](https://github.com/rust-lang/rust/pull/48309)
- Changing the default level of a lint over an edition boundary
- [https://github.com/rust-lang/rust/pull/49719](https://github.com/rust-lang/rust/pull/49719)
- Make a potentially breaking change
- [Improve lifetime errors with implicit trait object lifetimes
](https://github.com/rust-lang/rust/pull/66679)
- Change borrow checker diagnostics
- [Replace some desc logic in librustc_lint with article_and_desc](https://github.com/rust-lang/rust/pull/69740)
- Use `DefKind::article_and_desc` to get a description of some definition for diagnostics
- [Refactorings to get rid of rustc_codegen_utils](https://github.com/rust-lang/rust/pull/69965)
- Add or remove a compiler crate
- [Add rustc guide to toolstate](https://github.com/rust-lang/rust/pull/59772)
- Add a tool to toolstate
- [update `mem::Discriminant`](https://github.com/rust-lang/rust/pull/70705)
- Add an auto-trait (a trait automatically implemented for types by the compiler)