--- 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)