1. Getting Started
  2. About this guide
  3. Building and debugging rustc
  4. How to build and run the compiler
    1. Quickstart
    2. Prerequisites
    3. Suggested workflows
    4. Distribution artifacts
    5. Building documentation
    6. Rustdoc overview
    7. Adding a new target
    8. Optimized build
  5. Testing the compiler
    1. Running tests
      1. Testing with Docker
      2. Testing with CI
    2. Adding new tests
    3. Best practices
    4. Compiletest
      1. UI tests
      2. Test directives
      3. Minicore
    5. Ecosystem testing
      1. Crater
      2. Fuchsia
      3. Rust for Linux
    6. Codegen backend testing
      1. Cranelift codegen backend (stub)
      2. GCC codegen backend
    7. Performance testing
    8. Autodiff CI job
    9. Pre-stabilization CI job for the next solver and polonius alpha
    10. Parallel frontend CI job
    11. Standard library semver breakage test
    12. Misc info
  6. Debugging the compiler
    1. Using the tracing/logging instrumentation
  7. Profiling the compiler
    1. with the linux perf tool
    2. with Windows Performance Analyzer
    3. with the Rust benchmark suite
  8. crates.io dependencies
  9. Contributing to Rust
  10. Contribution procedures
  11. Writing rustc-dev-guide documentation
  12. About the compiler team
  13. Using Git
  14. Mastering @rustbot
  15. Running LLMs
    1. Writing code with LLMs
    2. Reviewing code with LLMs
  16. Walkthrough: a typical contribution
  17. Implementing new language features
  18. Stability guarantees
  19. Stability attributes
  20. Stabilizing language features
    1. Stabilization report template
  21. Feature Gates
  22. Coding conventions
  23. Procedures for breaking changes
  24. Using external repositories
  25. Fuzzing
  26. Notification groups
    1. Apple
    2. ARM
    3. Emscripten
    4. Fuchsia
    5. LoongArch
    6. RISC-V
    7. Rust for Linux
    8. WASI
    9. WebAssembly
    10. Windows
    11. GPU target
  27. Licenses
  28. Editions
  29. Bootstrapping
  30. Prologue
  31. What Bootstrapping does
  32. How Bootstrap does it
  33. Writing tools in Bootstrap
  34. Debugging bootstrap
  35. cfg(bootstrap) in dependencies
  36. High-level compiler architecture
  37. Prologue
  38. Overview of the compiler
  39. The compiler source code
  40. Queries: demand-driven compilation
    1. The Query Evaluation Model in detail
    2. Incremental compilation
    3. Incremental compilation in detail
    4. Debugging and testing
    5. Salsa
  41. Memory management in rustc
  42. Serialization in rustc
  43. Parallel compilation
  44. Rustdoc internals
    1. Search
    2. The rustdoc-html test suite
    3. The rustdoc-gui test suite (stub)
    4. The rustdoc-json test suite
  45. GPU offload internals
    1. Installation
    2. Usage
    3. Contributing
  46. Autodiff internals
    1. Installation
    2. How to debug
    3. Autodiff flags
    4. Type Trees
  47. Source code representation
  48. Prologue
  49. Syntax and the AST
    1. Lexing and parsing
    2. Macro expansion
    3. Name resolution
    4. Attributes
    5. #[test] implementation
    6. Panic implementation
    7. AST validation
    8. Feature gate checking
    9. Lang Items
  50. The HIR (High-level IR)
    1. Lowering AST to HIR
    2. Attribute Parsing
    3. Debugging
  51. Ambig/Unambig Types and Consts
  52. The THIR (Typed High-level IR)
  53. The MIR (Mid-level IR)
    1. MIR construction
    2. MIR visitor and traversal
    3. MIR queries and passes: getting the MIR
  54. Inline assembly
  55. Supporting infrastructure
  56. Command-line arguments
  57. rustc_driver and rustc_interface
    1. External rustc_drivers
    2. Example: Type checking
    3. Example: Getting diagnostics
  58. Errors and lints
    1. Diagnostic and subdiagnostic structs
    2. Translation
    3. LintStore
    4. Error codes
    5. Diagnostic items
    6. ErrorGuaranteed
  59. Analysis
  60. Prologue
  61. Generic parameter definitions
    1. EarlyBinder and instantiating parameters
  62. Binders and Higher ranked regions
    1. Instantiating binders
  63. Early vs Late bound parameters
  64. The ty module: representing types
    1. ADTs and Generic Arguments
    2. Parameter types/consts/regions
  65. TypeFolder and TypeFoldable
  66. Aliases and normalization
  67. Typing/Param envs
  68. Type inference
  69. Trait solving
    1. Higher-ranked trait bounds
    2. Caching subtleties
    3. Implied bounds
    4. Specialization
    5. Chalk-based trait solving
      1. Lowering to logic
      2. Goals and clauses
      3. Canonical queries
      4. Canonicalization
    6. Next-gen trait solving
      1. Invariants of the type system
      2. The solver
      3. Candidate preference
      4. Canonicalization
      5. Coinduction
      6. Caching
      7. Proof trees
      8. Opaque types
      9. Significant changes and quirks
      10. Sharing the trait solver with rust-analyzer
    7. Unsize and CoerceUnsized traits
    8. Having separate Trait and Projection bounds
  70. Well-formedness
  71. Variance
  72. Coherence checking
  73. HIR Type checking
    1. Coercions
    2. Method lookup
  74. Const generics
  75. Opaque types
    1. Inference details
    2. Return Position Impl Trait In Trait
    3. Region inference restrictions
  76. Const traits and const condition checking
  77. Pattern and exhaustiveness checking
  78. Unsafety checking
  79. MIR dataflow
  80. Drop elaboration
  81. The borrow checker
    1. Tracking moves and initialization
      1. Move paths
    2. MIR type checker
    3. Drop check
    4. Region inference
      1. Constraint propagation
      2. Lifetime parameters
      3. Member constraints
      4. Placeholders and universes
      5. Closure constraints
      6. Error reporting (stub)
    5. Two-phase-borrows
    6. Debugging the borrow checker
  82. Closure capture inference
  83. Async closures/"coroutine-closures"
  84. MIR to binaries
  85. Prologue
  86. MIR optimizations
  87. Debugging MIR
  88. Constant evaluation
    1. Interpreter
  89. Monomorphization
  90. Lowering MIR
  91. Code generation
    1. Updating LLVM
    2. Debugging LLVM
    3. Backend Agnostic Codegen
    4. Implicit caller location
  92. Debug info
    1. Rust codegen
    2. LLVM codegen
    3. Debugger internals
      1. LLDB internals
      2. GDB internals (stub)
    4. Debugger visualizers
      1. LLDB - Python Providers
      2. GDB - Python Providers
      3. CDB - Natvis (stub)
    5. Testing (stub)
    6. (Lecture notes) Debugging support in the Rust compiler
  93. Libraries and metadata
  94. Profile-guided optimization
  95. LLVM source-based code coverage
  96. Sanitizers support
  97. Appendix A: Background topics
  98. Appendix B: Glossary
  99. Appendix C: Code Index
  100. Appendix D: Compiler Lecture Series
  101. Appendix E: Bibliography
  102. Appendix F: Reading club sessions
  103. Appendix Z: HumorRust