forked from rust-lang/rustc-dev-guide
-
Couldn't load subscription status.
- Fork 0
A guide to how rustc works and how to contribute to it.
License
Couldn't load subscription status.
max-heller/rustc-dev-guide
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
<!DOCTYPE HTML> <html lang="en" class="sidebar-visible no-js light"> <head> <!-- Book generated using mdBook --> <meta charset="UTF-8"> <title>Contribution Procedures - Rust Compiler Development Guide</title> <!-- Custom HTML head --> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <meta name="description" content="A guide to developing the Rust compiler (rustc)"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="theme-color" content="#ffffff" /> <link rel="icon" href="favicon.svg"> <link rel="shortcut icon" href="favicon.png"> <link rel="stylesheet" href="css/variables.css"> <link rel="stylesheet" href="css/general.css"> <link rel="stylesheet" href="css/chrome.css"> <link rel="stylesheet" href="css/print.css" media="print"> <!-- Fonts --> <link rel="stylesheet" href="FontAwesome/css/font-awesome.css"> <link rel="stylesheet" href="fonts/fonts.css"> <!-- Highlight.js Stylesheets --> <link rel="stylesheet" href="highlight.css"> <link rel="stylesheet" href="tomorrow-night.css"> <link rel="stylesheet" href="ayu-highlight.css"> <!-- Custom theme stylesheets --> </head> <body> <!-- Provide site root to javascript --> <script type="text/javascript"> var path_to_root = ""; var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light"; </script> <!-- Work around some values being stored in localStorage wrapped in quotes --> <script type="text/javascript"> try { var theme = localStorage.getItem('mdbook-theme'); var sidebar = localStorage.getItem('mdbook-sidebar'); if (theme.startsWith('"') && theme.endsWith('"')) { localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); } if (sidebar.startsWith('"') && sidebar.endsWith('"')) { localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); } } catch (e) { } </script> <!-- Set the theme before any content is loaded, prevents flash --> <script type="text/javascript"> var theme; try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } if (theme === null || theme === undefined) { theme = default_theme; } var html = document.querySelector('html'); html.classList.remove('no-js') html.classList.remove('light') html.classList.add(theme); html.classList.add('js'); </script> <!-- Hide / unhide sidebar before it is displayed --> <script type="text/javascript"> var html = document.querySelector('html'); var sidebar = 'hidden'; if (document.body.clientWidth >= 1080) { try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } sidebar = sidebar || 'visible'; } html.classList.remove('sidebar-visible'); html.classList.add("sidebar-" + sidebar); </script> <nav id="sidebar" class="sidebar" aria-label="Table of contents"> <div class="sidebar-scrollbox"> <ol class="chapter"><li class="chapter-item affix "><a href="getting-started.html">Getting Started</a></li><li class="chapter-item affix "><a href="about-this-guide.html">About this guide</a></li><li class="spacer"></li><li class="chapter-item affix "><li class="part-title">Building and debugging rustc</li><li class="chapter-item "><a href="building/how-to-build-and-run.html"><strong aria-hidden="true">1.</strong> How to build and run the compiler</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="building/prerequisites.html"><strong aria-hidden="true">1.1.</strong> Prerequisites</a></li><li class="chapter-item "><a href="building/suggested.html"><strong aria-hidden="true">1.2.</strong> Suggested Workflows</a></li><li class="chapter-item "><a href="building/build-install-distribution-artifacts.html"><strong aria-hidden="true">1.3.</strong> Distribution artifacts</a></li><li class="chapter-item "><a href="building/compiler-documenting.html"><strong aria-hidden="true">1.4.</strong> Building Documentation</a></li><li class="chapter-item "><a href="rustdoc.html"><strong aria-hidden="true">1.5.</strong> Rustdoc overview</a></li><li class="chapter-item "><a href="building/new-target.html"><strong aria-hidden="true">1.6.</strong> Adding a new target</a></li><li class="chapter-item "><a href="building/optimized-build.html"><strong aria-hidden="true">1.7.</strong> Optimized build</a></li></ol></li><li class="chapter-item "><a href="tests/intro.html"><strong aria-hidden="true">2.</strong> Testing the compiler</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="tests/running.html"><strong aria-hidden="true">2.1.</strong> Running tests</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="tests/docker.html"><strong aria-hidden="true">2.1.1.</strong> Testing with Docker</a></li><li class="chapter-item "><a href="tests/ci.html"><strong aria-hidden="true">2.1.2.</strong> Testing with CI</a></li></ol></li><li class="chapter-item "><a href="tests/adding.html"><strong aria-hidden="true">2.2.</strong> Adding new tests</a></li><li class="chapter-item "><a href="tests/compiletest.html"><strong aria-hidden="true">2.3.</strong> Compiletest</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="tests/ui.html"><strong aria-hidden="true">2.3.1.</strong> UI tests</a></li><li class="chapter-item "><a href="tests/headers.html"><strong aria-hidden="true">2.3.2.</strong> Test headers</a></li></ol></li><li class="chapter-item "><a href="tests/perf.html"><strong aria-hidden="true">2.4.</strong> Performance testing</a></li><li class="chapter-item "><a href="tests/crater.html"><strong aria-hidden="true">2.5.</strong> Crater</a></li><li class="chapter-item "><a href="tests/suggest-tests.html"><strong aria-hidden="true">2.6.</strong> Suggest tests tool</a></li></ol></li><li class="chapter-item "><a href="compiler-debugging.html"><strong aria-hidden="true">3.</strong> Debugging the compiler</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="tracing.html"><strong aria-hidden="true">3.1.</strong> Using the tracing/logging instrumentation</a></li></ol></li><li class="chapter-item "><a href="profiling.html"><strong aria-hidden="true">4.</strong> Profiling the compiler</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="profiling/with_perf.html"><strong aria-hidden="true">4.1.</strong> with the linux perf tool</a></li><li class="chapter-item "><a href="profiling/wpa_profiling.html"><strong aria-hidden="true">4.2.</strong> with Windows Performance Analyzer</a></li></ol></li><li class="chapter-item "><a href="crates-io.html"><strong aria-hidden="true">5.</strong> crates.io Dependencies</a></li><li class="chapter-item affix "><li class="part-title">Contributing to Rust</li><li class="chapter-item expanded "><a href="contributing.html" class="active"><strong aria-hidden="true">6.</strong> Contribution Procedures</a></li><li class="chapter-item "><a href="compiler-team.html"><strong aria-hidden="true">7.</strong> About the compiler team</a></li><li class="chapter-item "><a href="git.html"><strong aria-hidden="true">8.</strong> Using Git</a></li><li class="chapter-item "><a href="rustbot.html"><strong aria-hidden="true">9.</strong> Mastering @rustbot</a></li><li class="chapter-item "><a href="walkthrough.html"><strong aria-hidden="true">10.</strong> Walkthrough: a typical contribution</a></li><li class="chapter-item "><a href="implementing_new_features.html"><strong aria-hidden="true">11.</strong> Implementing new language features</a></li><li class="chapter-item "><a href="stability.html"><strong aria-hidden="true">12.</strong> Stability attributes</a></li><li class="chapter-item "><a href="stabilization_guide.html"><strong aria-hidden="true">13.</strong> Stabilizing Features</a></li><li class="chapter-item "><a href="feature-gates.html"><strong aria-hidden="true">14.</strong> Feature Gates</a></li><li class="chapter-item "><a href="conventions.html"><strong aria-hidden="true">15.</strong> Coding conventions</a></li><li class="chapter-item "><a href="bug-fix-procedure.html"><strong aria-hidden="true">16.</strong> Procedures for Breaking Changes</a></li><li class="chapter-item "><a href="external-repos.html"><strong aria-hidden="true">17.</strong> Using external repositories</a></li><li class="chapter-item "><a href="fuzzing.html"><strong aria-hidden="true">18.</strong> Fuzzing</a></li><li class="chapter-item "><a href="notification-groups/about.html"><strong aria-hidden="true">19.</strong> Notification groups</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="notification-groups/arm.html"><strong aria-hidden="true">19.1.</strong> ARM</a></li><li class="chapter-item "><a href="notification-groups/cleanup-crew.html"><strong aria-hidden="true">19.2.</strong> Cleanup Crew</a></li><li class="chapter-item "><a href="notification-groups/llvm.html"><strong aria-hidden="true">19.3.</strong> LLVM</a></li><li class="chapter-item "><a href="notification-groups/risc-v.html"><strong aria-hidden="true">19.4.</strong> RISC-V</a></li><li class="chapter-item "><a href="notification-groups/windows.html"><strong aria-hidden="true">19.5.</strong> Windows</a></li></ol></li><li class="chapter-item "><a href="licenses.html"><strong aria-hidden="true">20.</strong> Licenses</a></li><li class="chapter-item "><a href="guides/editions.html"><strong aria-hidden="true">21.</strong> Editions</a></li><li class="chapter-item affix "><li class="part-title">High-level Compiler Architecture</li><li class="chapter-item "><a href="part-2-intro.html"><strong aria-hidden="true">22.</strong> Prologue</a></li><li class="chapter-item "><a href="overview.html"><strong aria-hidden="true">23.</strong> Overview of the compiler</a></li><li class="chapter-item "><a href="compiler-src.html"><strong aria-hidden="true">24.</strong> The compiler source code</a></li><li class="chapter-item "><a href="building/bootstrapping.html"><strong aria-hidden="true">25.</strong> Bootstrapping</a></li><li class="chapter-item "><a href="query.html"><strong aria-hidden="true">26.</strong> Queries: demand-driven compilation</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="queries/query-evaluation-model-in-detail.html"><strong aria-hidden="true">26.1.</strong> The Query Evaluation Model in Detail</a></li><li class="chapter-item "><a href="queries/incremental-compilation.html"><strong aria-hidden="true">26.2.</strong> Incremental compilation</a></li><li class="chapter-item "><a href="queries/incremental-compilation-in-detail.html"><strong aria-hidden="true">26.3.</strong> Incremental compilation In Detail</a></li><li class="chapter-item "><a href="incrcomp-debugging.html"><strong aria-hidden="true">26.4.</strong> Debugging and Testing</a></li><li class="chapter-item "><a href="salsa.html"><strong aria-hidden="true">26.5.</strong> Salsa</a></li></ol></li><li class="chapter-item "><a href="memory.html"><strong aria-hidden="true">27.</strong> Memory Management in Rustc</a></li><li class="chapter-item "><a href="serialization.html"><strong aria-hidden="true">28.</strong> Serialization in Rustc</a></li><li class="chapter-item "><a href="parallel-rustc.html"><strong aria-hidden="true">29.</strong> Parallel Compilation</a></li><li class="chapter-item "><a href="rustdoc-internals.html"><strong aria-hidden="true">30.</strong> Rustdoc internals</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="rustdoc-internals/search.html"><strong aria-hidden="true">30.1.</strong> Search</a></li></ol></li><li class="chapter-item "><li class="part-title">Source Code Representation</li><li class="chapter-item "><a href="part-3-intro.html"><strong aria-hidden="true">31.</strong> Prologue</a></li><li class="chapter-item "><a href="cli.html"><strong aria-hidden="true">32.</strong> Command-line arguments</a></li><li class="chapter-item "><a href="rustc-driver.html"><strong aria-hidden="true">33.</strong> rustc_driver and rustc_interface</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="rustc-driver-interacting-with-the-ast.html"><strong aria-hidden="true">33.1.</strong> Example: Type checking</a></li><li class="chapter-item "><a href="rustc-driver-getting-diagnostics.html"><strong aria-hidden="true">33.2.</strong> Example: Getting diagnostics</a></li></ol></li><li class="chapter-item "><a href="syntax-intro.html"><strong aria-hidden="true">34.</strong> Syntax and the AST</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="the-parser.html"><strong aria-hidden="true">34.1.</strong> Lexing and Parsing</a></li><li class="chapter-item "><a href="macro-expansion.html"><strong aria-hidden="true">34.2.</strong> Macro expansion</a></li><li class="chapter-item "><a href="name-resolution.html"><strong aria-hidden="true">34.3.</strong> Name resolution</a></li><li class="chapter-item "><a href="test-implementation.html"><strong aria-hidden="true">34.4.</strong> #[test] Implementation</a></li><li class="chapter-item "><a href="panic-implementation.html"><strong aria-hidden="true">34.5.</strong> Panic Implementation</a></li><li class="chapter-item "><a href="ast-validation.html"><strong aria-hidden="true">34.6.</strong> AST Validation</a></li><li class="chapter-item "><a href="feature-gate-ck.html"><strong aria-hidden="true">34.7.</strong> Feature Gate Checking</a></li><li class="chapter-item "><a href="lang-items.html"><strong aria-hidden="true">34.8.</strong> Lang Items</a></li></ol></li><li class="chapter-item "><a href="hir.html"><strong aria-hidden="true">35.</strong> The HIR (High-level IR)</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="lowering.html"><strong aria-hidden="true">35.1.</strong> Lowering AST to HIR</a></li><li class="chapter-item "><a href="hir-debugging.html"><strong aria-hidden="true">35.2.</strong> Debugging</a></li></ol></li><li class="chapter-item "><a href="thir.html"><strong aria-hidden="true">36.</strong> The THIR (Typed High-level IR)</a></li><li class="chapter-item "><a href="mir/index.html"><strong aria-hidden="true">37.</strong> The MIR (Mid-level IR)</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="mir/construction.html"><strong aria-hidden="true">37.1.</strong> MIR construction</a></li><li class="chapter-item "><a href="mir/visitor.html"><strong aria-hidden="true">37.2.</strong> MIR visitor and traversal</a></li><li class="chapter-item "><a href="mir/passes.html"><strong aria-hidden="true">37.3.</strong> MIR passes: getting the MIR for a function</a></li></ol></li><li class="chapter-item "><a href="identifiers.html"><strong aria-hidden="true">38.</strong> Identifiers in the compiler</a></li><li class="chapter-item "><a href="closure.html"><strong aria-hidden="true">39.</strong> Closure expansion</a></li><li class="chapter-item "><a href="asm.html"><strong aria-hidden="true">40.</strong> Inline assembly</a></li><li class="chapter-item affix "><li class="part-title">Analysis</li><li class="chapter-item "><a href="part-4-intro.html"><strong aria-hidden="true">41.</strong> Prologue</a></li><li class="chapter-item "><a href="ty.html"><strong aria-hidden="true">42.</strong> The ty module: representing types</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="generics.html"><strong aria-hidden="true">42.1.</strong> Generics and substitutions</a></li><li class="chapter-item "><a href="ty-fold.html"><strong aria-hidden="true">42.2.</strong> TypeFolder and TypeFoldable</a></li><li class="chapter-item "><a href="generic_arguments.html"><strong aria-hidden="true">42.3.</strong> Generic arguments</a></li><li class="chapter-item "><a href="constants.html"><strong aria-hidden="true">42.4.</strong> Constants in the type system</a></li><li class="chapter-item "><a href="bound-vars-and-params.html"><strong aria-hidden="true">42.5.</strong> Bound vars and Parameters</a></li></ol></li><li class="chapter-item "><a href="type-inference.html"><strong aria-hidden="true">43.</strong> Type inference</a></li><li class="chapter-item "><a href="traits/resolution.html"><strong aria-hidden="true">44.</strong> Trait solving</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="early-late-bound-summary.html"><strong aria-hidden="true">44.1.</strong> Early and Late Bound Parameter Definitions</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="what-does-early-late-bound-mean.html"><strong aria-hidden="true">44.1.1.</strong> What are early and late bound parameters</a></li><li class="chapter-item "><a href="turbofishing-and-early-late-bound.html"><strong aria-hidden="true">44.1.2.</strong> Interactions with turbofishing</a></li></ol></li><li class="chapter-item "><a href="traits/hrtb.html"><strong aria-hidden="true">44.2.</strong> Higher-ranked trait bounds</a></li><li class="chapter-item "><a href="traits/caching.html"><strong aria-hidden="true">44.3.</strong> Caching subtleties</a></li><li class="chapter-item "><a href="traits/specialization.html"><strong aria-hidden="true">44.4.</strong> Specialization</a></li><li class="chapter-item "><a href="traits/chalk.html"><strong aria-hidden="true">44.5.</strong> Chalk-based trait solving</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="traits/lowering-to-logic.html"><strong aria-hidden="true">44.5.1.</strong> Lowering to logic</a></li><li class="chapter-item "><a href="traits/goals-and-clauses.html"><strong aria-hidden="true">44.5.2.</strong> Goals and clauses</a></li><li class="chapter-item "><a href="traits/canonical-queries.html"><strong aria-hidden="true">44.5.3.</strong> Canonical queries</a></li><li class="chapter-item "><a href="traits/canonicalization.html"><strong aria-hidden="true">44.5.4.</strong> Canonicalization</a></li></ol></li><li class="chapter-item "><a href="solve/trait-solving.html"><strong aria-hidden="true">44.6.</strong> Next-gen trait solving</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="solve/invariants.html"><strong aria-hidden="true">44.6.1.</strong> Invariants of the type system</a></li><li class="chapter-item "><a href="solve/the-solver.html"><strong aria-hidden="true">44.6.2.</strong> The solver</a></li><li class="chapter-item "><a href="solve/canonicalization.html"><strong aria-hidden="true">44.6.3.</strong> Canonicalization</a></li><li class="chapter-item "><a href="solve/coinduction.html"><strong aria-hidden="true">44.6.4.</strong> Coinduction</a></li><li class="chapter-item "><a href="solve/proof-trees.html"><strong aria-hidden="true">44.6.5.</strong> Proof trees</a></li><li class="chapter-item "><a href="solve/normalization.html"><strong aria-hidden="true">44.6.6.</strong> Normalization</a></li></ol></li><li class="chapter-item "><a href="traits/unsize.html"><strong aria-hidden="true">44.7.</strong> Unsize and CoerceUnsized traits</a></li></ol></li><li class="chapter-item "><a href="type-checking.html"><strong aria-hidden="true">45.</strong> Type checking</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="method-lookup.html"><strong aria-hidden="true">45.1.</strong> Method Lookup</a></li><li class="chapter-item "><a href="variance.html"><strong aria-hidden="true">45.2.</strong> Variance</a></li><li class="chapter-item "><a href="opaque-types-type-alias-impl-trait.html"><strong aria-hidden="true">45.3.</strong> Opaque Types</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="opaque-types-impl-trait-inference.html"><strong aria-hidden="true">45.3.1.</strong> Inference details</a></li><li class="chapter-item "><a href="return-position-impl-trait-in-trait.html"><strong aria-hidden="true">45.3.2.</strong> Return Position Impl Trait In Trait</a></li></ol></li></ol></li><li class="chapter-item "><a href="effects.html"><strong aria-hidden="true">46.</strong> Effect checking</a></li><li class="chapter-item "><a href="pat-exhaustive-checking.html"><strong aria-hidden="true">47.</strong> Pattern and Exhaustiveness Checking</a></li><li class="chapter-item "><a href="mir/dataflow.html"><strong aria-hidden="true">48.</strong> MIR dataflow</a></li><li class="chapter-item "><a href="mir/drop-elaboration.html"><strong aria-hidden="true">49.</strong> Drop elaboration</a></li><li class="chapter-item "><a href="borrow_check.html"><strong aria-hidden="true">50.</strong> The borrow checker</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="borrow_check/moves_and_initialization.html"><strong aria-hidden="true">50.1.</strong> Tracking moves and initialization</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="borrow_check/moves_and_initialization/move_paths.html"><strong aria-hidden="true">50.1.1.</strong> Move paths</a></li></ol></li><li class="chapter-item "><a href="borrow_check/type_check.html"><strong aria-hidden="true">50.2.</strong> MIR type checker</a></li><li class="chapter-item "><a href="borrow_check/drop_check.html"><strong aria-hidden="true">50.3.</strong> Drop check</a></li><li class="chapter-item "><a href="borrow_check/region_inference.html"><strong aria-hidden="true">50.4.</strong> Region inference</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="borrow_check/region_inference/constraint_propagation.html"><strong aria-hidden="true">50.4.1.</strong> Constraint propagation</a></li><li class="chapter-item "><a href="borrow_check/region_inference/lifetime_parameters.html"><strong aria-hidden="true">50.4.2.</strong> Lifetime parameters</a></li><li class="chapter-item "><a href="borrow_check/region_inference/member_constraints.html"><strong aria-hidden="true">50.4.3.</strong> Member constraints</a></li><li class="chapter-item "><a href="borrow_check/region_inference/placeholders_and_universes.html"><strong aria-hidden="true">50.4.4.</strong> Placeholders and universes</a></li><li class="chapter-item "><a href="borrow_check/region_inference/closure_constraints.html"><strong aria-hidden="true">50.4.5.</strong> Closure constraints</a></li><li class="chapter-item "><a href="borrow_check/region_inference/error_reporting.html"><strong aria-hidden="true">50.4.6.</strong> Error reporting</a></li></ol></li><li class="chapter-item "><a href="borrow_check/two_phase_borrows.html"><strong aria-hidden="true">50.5.</strong> Two-phase-borrows</a></li></ol></li><li class="chapter-item "><a href="param_env.html"><strong aria-hidden="true">51.</strong> Parameter Environments</a></li><li class="chapter-item "><a href="diagnostics.html"><strong aria-hidden="true">52.</strong> Errors and Lints</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="diagnostics/diagnostic-structs.html"><strong aria-hidden="true">52.1.</strong> Diagnostic and subdiagnostic structs</a></li><li class="chapter-item "><a href="diagnostics/translation.html"><strong aria-hidden="true">52.2.</strong> Translation</a></li><li class="chapter-item "><a href="diagnostics/lintstore.html"><strong aria-hidden="true">52.3.</strong> LintStore</a></li><li class="chapter-item "><a href="diagnostics/error-codes.html"><strong aria-hidden="true">52.4.</strong> Error codes</a></li><li class="chapter-item "><a href="diagnostics/diagnostic-items.html"><strong aria-hidden="true">52.5.</strong> Diagnostic items</a></li><li class="chapter-item "><a href="diagnostics/error-guaranteed.html"><strong aria-hidden="true">52.6.</strong> ErrorGuaranteed</a></li></ol></li><li class="chapter-item "><li class="part-title">MIR to Binaries</li><li class="chapter-item "><a href="part-5-intro.html"><strong aria-hidden="true">53.</strong> Prologue</a></li><li class="chapter-item "><a href="mir/optimizations.html"><strong aria-hidden="true">54.</strong> MIR optimizations</a></li><li class="chapter-item "><a href="mir/debugging.html"><strong aria-hidden="true">55.</strong> Debugging</a></li><li class="chapter-item "><a href="const-eval.html"><strong aria-hidden="true">56.</strong> Constant evaluation</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="const-eval/interpret.html"><strong aria-hidden="true">56.1.</strong> Interpreter</a></li></ol></li><li class="chapter-item "><a href="backend/monomorph.html"><strong aria-hidden="true">57.</strong> Monomorphization</a></li><li class="chapter-item "><a href="backend/lowering-mir.html"><strong aria-hidden="true">58.</strong> Lowering MIR</a></li><li class="chapter-item "><a href="backend/codegen.html"><strong aria-hidden="true">59.</strong> Code Generation</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="backend/updating-llvm.html"><strong aria-hidden="true">59.1.</strong> Updating LLVM</a></li><li class="chapter-item "><a href="backend/debugging.html"><strong aria-hidden="true">59.2.</strong> Debugging LLVM</a></li><li class="chapter-item "><a href="backend/backend-agnostic.html"><strong aria-hidden="true">59.3.</strong> Backend Agnostic Codegen</a></li><li class="chapter-item "><a href="backend/implicit-caller-location.html"><strong aria-hidden="true">59.4.</strong> Implicit Caller Location</a></li></ol></li><li class="chapter-item "><a href="backend/libs-and-metadata.html"><strong aria-hidden="true">60.</strong> Libraries and Metadata</a></li><li class="chapter-item "><a href="profile-guided-optimization.html"><strong aria-hidden="true">61.</strong> Profile-guided Optimization</a></li><li class="chapter-item "><a href="llvm-coverage-instrumentation.html"><strong aria-hidden="true">62.</strong> LLVM Source-Based Code Coverage</a></li><li class="chapter-item "><a href="sanitizers.html"><strong aria-hidden="true">63.</strong> Sanitizers Support</a></li><li class="chapter-item "><a href="debugging-support-in-rustc.html"><strong aria-hidden="true">64.</strong> Debugging support in the Rust compiler</a></li><li class="spacer"></li><li class="chapter-item affix "><a href="appendix/background.html">Appendix A: Background topics</a></li><li class="chapter-item affix "><a href="appendix/glossary.html">Appendix B: Glossary</a></li><li class="chapter-item affix "><a href="appendix/code-index.html">Appendix C: Code Index</a></li><li class="chapter-item affix "><a href="appendix/compiler-lecture.html">Appendix D: Compiler Lecture Series</a></li><li class="chapter-item affix "><a href="appendix/bibliography.html">Appendix E: Bibliography</a></li><li class="chapter-item affix "><a href="appendix/humorust.html">Appendix Z: HumorRust</a></li><li class="spacer"></li></ol> </div> <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div> </nav> <div id="page-wrapper" class="page-wrapper"> <div class="page"> <div id="menu-bar-hover-placeholder"></div> <div id="menu-bar" class="menu-bar sticky bordered"> <div class="left-buttons"> <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar"> <i class="fa fa-bars"></i> </button> <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list"> <i class="fa fa-paint-brush"></i> </button> <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu"> <li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li> <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li> <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li> <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li> <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li> </ul> <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar"> <i class="fa fa-search"></i> </button> </div> <h1 class="menu-title">Rust Compiler Development Guide</h1> <div class="right-buttons"> <a href="print.html" title="Print this book" aria-label="Print this book"> <i id="print-button" class="fa fa-print"></i> </a> <a href="https://github.com/rust-lang/rustc-dev-guide" title="Git repository" aria-label="Git repository"> <i id="git-repository-button" class="fa fa-github"></i> </a> <a href="https://github.com/rust-lang/rustc-dev-guide/edit/master/src/contributing.md" title="Suggest an edit" aria-label="Suggest an edit"> <i id="git-edit-button" class="fa fa-edit"></i> </a> </div> </div> <div id="search-wrapper" class="hidden"> <form id="searchbar-outer" class="searchbar-outer"> <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header"> </form> <div id="searchresults-outer" class="searchresults-outer hidden"> <div id="searchresults-header" class="searchresults-header"></div> <ul id="searchresults"> </ul> </div> </div> <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> <script type="text/javascript"> document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) { link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); }); </script> <div id="content" class="content"> <main> <h1 id="contribution-procedures"><a class="header" href="#contribution-procedures">Contribution Procedures</a></h1> <ul> <li><a href="#bug-reports">Bug reports</a></li> <li><a href="#bug-fixes-or-normal-code-changes">Bug fixes or "normal" code changes</a></li> <li><a href="#new-features">New features</a> <ul> <li><a href="#breaking-changes">Breaking changes</a></li> <li><a href="#major-changes">Major changes</a></li> <li><a href="#performance">Performance</a></li> </ul> </li> <li><a href="#pull-requests">Pull requests</a> <ul> <li><a href="#r">r?</a></li> <li><a href="#waiting-for-reviews">Waiting for reviews</a></li> <li><a href="#ci">CI</a></li> <li><a href="#r-1">r+</a></li> <li><a href="#opening-a-pr">Opening a PR</a></li> </ul> </li> <li><a href="#external-dependencies">External dependencies</a></li> <li><a href="#writing-documentation">Writing documentation</a> <ul> <li><a href="#contributing-to-rustc-dev-guide">Contributing to rustc-dev-guide</a></li> </ul> </li> <li><a href="#issue-triage">Issue triage</a> <ul> <li><a href="#rfcbot-labels">Rfcbot labels</a></li> </ul> </li> <li><a href="#helpful-links-and-information">Helpful links and information</a></li> </ul> <h2 id="bug-reports"><a class="header" href="#bug-reports">Bug reports</a></h2> <p>While bugs are unfortunate, they're a reality in software. We can't fix what we don't know about, so please report liberally. If you're not sure if something is a bug or not, feel free to file a bug anyway.</p> <p><strong>If you believe reporting your bug publicly represents a security risk to Rust users, please follow our <a href="https://www.rust-lang.org/policies/security">instructions for reporting security vulnerabilities</a></strong>.</p> <p>If you're using the nightly channel, please check if the bug exists in the latest toolchain before filing your bug. It might be fixed already.</p> <p>If you have the chance, before reporting a bug, please <a href="https://github.com/rust-lang/rust/issues?q=is%3Aissue">search existing issues</a>, as it's possible that someone else has already reported your error. This doesn't always work, and sometimes it's hard to know what to search for, so consider this extra credit. We won't mind if you accidentally file a duplicate report.</p> <p>Similarly, to help others who encountered the bug find your issue, consider filing an issue with a descriptive title, which contains information that might be unique to it. This can be the language or compiler feature used, the conditions that trigger the bug, or part of the error message if there is any. An example could be: <strong>"impossible case reached" on lifetime inference for impl Trait in return position</strong>.</p> <p>Opening an issue is as easy as following <a href="https://github.com/rust-lang/rust/issues/new/choose">this link</a> and filling out the fields in the appropriate provided template.</p> <h2 id="bug-fixes-or-normal-code-changes"><a class="header" href="#bug-fixes-or-normal-code-changes">Bug fixes or "normal" code changes</a></h2> <p>For most PRs, no special procedures are needed. You can just <a href="#pull-requests">open a PR</a>, and it will be reviewed, approved, and merged. This includes most bug fixes, refactorings, and other user-invisible changes. The next few sections talk about exceptions to this rule.</p> <p>Also, note that it is perfectly acceptable to open WIP PRs or GitHub <a href="https://github.blog/2019-02-14-introducing-draft-pull-requests/">Draft PRs</a>. Some people prefer to do this so they can get feedback along the way or share their code with a collaborator. Others do this so they can utilize the CI to build and test their PR (e.g. when developing on a slow machine).</p> <h2 id="new-features"><a class="header" href="#new-features">New features</a></h2> <p>Rust has strong backwards-compatibility guarantees. Thus, new features can't just be implemented directly in stable Rust. Instead, we have 3 release channels: stable, beta, and nightly.</p> <ul> <li><strong>Stable</strong>: this is the latest stable release for general usage.</li> <li><strong>Beta</strong>: this is the next release (will be stable within 6 weeks).</li> <li><strong>Nightly</strong>: follows the <code>master</code> branch of the repo. This is the only channel where unstable, incomplete, or experimental features are usable with feature gates.</li> </ul> <p>See <a href="./implementing_new_features.html">this chapter on implementing new features</a> for more information.</p> <h3 id="breaking-changes"><a class="header" href="#breaking-changes">Breaking changes</a></h3> <p>Breaking changes have a <a href="bug-fix-procedure.html">dedicated section</a> in the dev-guide.</p> <h3 id="major-changes"><a class="header" href="#major-changes">Major changes</a></h3> <p>The compiler team has a special process for large changes, whether or not they cause breakage. This process is called a Major Change Proposal (MCP). MCP is a relatively lightweight mechanism for getting feedback on large changes to the compiler (as opposed to a full RFC or a design meeting with the team).</p> <p>Example of things that might require MCPs include major refactorings, changes to important types, or important changes to how the compiler does something, or smaller user-facing changes.</p> <p><strong>When in doubt, ask on <a href="https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler">zulip</a>. It would be a shame to put a lot of work into a PR that ends up not getting merged!</strong> <a href="https://forge.rust-lang.org/compiler/mcp.html">See this document</a> for more info on MCPs.</p> <h3 id="performance"><a class="header" href="#performance">Performance</a></h3> <p>Compiler performance is important. We have put a lot of effort over the last few years into <a href="https://perf.rust-lang.org/dashboard.html">gradually improving it</a>.</p> <p>If you suspect that your change may cause a performance regression (or improvement), you can request a "perf run" (and your reviewer may also request one before approving). This is yet another bot that will compile a collection of benchmarks on a compiler with your changes. The numbers are reported <a href="https://perf.rust-lang.org">here</a>, and you can see a comparison of your changes against the latest master.</p> <blockquote> <p>For an introduction to the performance of Rust code in general which would also be useful in rustc development, see <a href="https://nnethercote.github.io/perf-book/">The Rust Performance Book</a>.</p> </blockquote> <h2 id="pull-requests"><a class="header" href="#pull-requests">Pull requests</a></h2> <p>Pull requests (or PRs for short) are the primary mechanism we use to change Rust. GitHub itself has some <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests">great documentation</a> on using the Pull Request feature. We use the "fork and pull" model <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models#fork-and-pull-model">described here</a>, where contributors push changes to their personal fork and create pull requests to bring those changes into the source repository. We have more info about how to use git when contributing to Rust under <a href="./git.html">the git section</a>.</p> <h3 id="r"><a class="header" href="#r">r?</a></h3> <p>All pull requests are reviewed by another person. We have a bot, <a href="https://github.com/rustbot">@rustbot</a>, that will automatically assign a random person to review your request based on which files you changed.</p> <p>If you want to request that a specific person reviews your pull request, you can add an <code>r?</code> to the pull request description or in a comment. For example, if you want to ask a review to @awesome-reviewer, add</p> <pre><code>r? @awesome-reviewer </code></pre> <p>to the end of the pull request description, and <a href="https://github.com/rustbot">@rustbot</a> will assign them instead of a random person. This is entirely optional.</p> <p>You can also assign a random reviewer from a specific team by writing <code>r? rust-lang/groupname</code>. As an example, if you were making a diagnostics change, then you could get a reviewer from the diagnostics team by adding:</p> <pre><code>r? rust-lang/diagnostics </code></pre> <p>For a full list of possible <code>groupname</code>s, check the <code>adhoc_groups</code> section at the <a href="https://github.com/rust-lang/rust/blob/HEAD/triagebot.toml">triagebot.toml config file</a>, or the list of teams in the <a href="https://github.com/rust-lang/team/tree/HEAD/teams">rust-lang teams database</a>.</p> <h3 id="waiting-for-reviews"><a class="header" href="#waiting-for-reviews">Waiting for reviews</a></h3> <blockquote> <p>NOTE</p> <p>Pull request reviewers are often working at capacity, and many of them are contributing on a volunteer basis. In order to minimize review delays, pull request authors and assigned reviewers should ensure that the review label (<code>S-waiting-on-review</code> and <code>S-waiting-on-author</code>) stays updated, invoking these commands when appropriate:</p> <ul> <li> <p><code>@rustbot author</code>: the review is finished, and PR author should check the comments and take action accordingly.</p> </li> <li> <p><code>@rustbot review</code>: the author is ready for a review, and this PR will be queued again in the reviewer's queue.</p> </li> </ul> </blockquote> <p>Please note that the reviewers are humans, who for the most part work on <code>rustc</code> in their free time. This means that they can take some time to respond and review your PR. It also means that reviewers can miss some PRs that are assigned to them.</p> <p>To try to move PRs forward, the Triage WG regularly goes through all PRs that are waiting for review and haven't been discussed for at least 2 weeks. If you don't get a review within 2 weeks, feel free to ask the Triage WG on Zulip (<a href="https://rust-lang.zulipchat.com/#narrow/stream/242269-t-release.2Ftriage">#t-release/triage</a>). They have knowledge of when to ping, who might be on vacation, etc.</p> <p>The reviewer may request some changes using the GitHub code review interface. They may also request special procedures for some PRs. See <a href="tests/crater.html">Crater</a> and <a href="bug-fix-procedure.html">Breaking Changes</a> chapters for some examples of such procedures.</p> <h3 id="ci"><a class="header" href="#ci">CI</a></h3> <p>In addition to being reviewed by a human, pull requests are automatically tested, thanks to continuous integration (CI). Basically, every time you open and update a pull request, CI builds the compiler and tests it against the <a href="tests/intro.html">compiler test suite</a>, and also performs other tests such as checking that your pull request is in compliance with Rust's style guidelines.</p> <p>Running continuous integration tests allows PR authors to catch mistakes early without going through a first review cycle, and also helps reviewers stay aware of the status of a particular pull request.</p> <p>Rust has plenty of CI capacity, and you should never have to worry about wasting computational resources each time you push a change. It is also perfectly fine (and even encouraged!) to use the CI to test your changes if it can help your productivity. In particular, we don't recommend running the full <code>./x test</code> suite locally, since it takes a very long time to execute.</p> <h3 id="r-1"><a class="header" href="#r-1">r+</a></h3> <p>After someone has reviewed your pull request, they will leave an annotation on the pull request with an <code>r+</code>. It will look something like this:</p> <pre><code>@bors r+ </code></pre> <p>This tells <a href="https://github.com/bors">@bors</a>, our lovable integration bot, that your pull request has been approved. The PR then enters the <a href="https://bors.rust-lang.org/queue/rust">merge queue</a>, where <a href="https://github.com/bors">@bors</a> will run <em>all</em> the tests on <em>every</em> platform we support. If it all works out, <a href="https://github.com/bors">@bors</a> will merge your code into <code>master</code> and close the pull request.</p> <p>Depending on the scale of the change, you may see a slightly different form of <code>r+</code>:</p> <pre><code>@bors r+ rollup </code></pre> <p>The additional <code>rollup</code> tells <a href="https://github.com/bors">@bors</a> that this change should always be "rolled up". Changes that are rolled up are tested and merged alongside other PRs, to speed the process up. Typically only small changes that are expected not to conflict with one another are marked as "always roll up".</p> <p>Be patient; this can take a while and the queue can sometimes be long. PRs are never merged by hand.</p> <h3 id="opening-a-pr"><a class="header" href="#opening-a-pr">Opening a PR</a></h3> <p>You are now ready to file a pull request? Great! Here are a few points you should be aware of.</p> <p>All pull requests should be filed against the <code>master</code> branch, unless you know for sure that you should target a different branch.</p> <p>Make sure your pull request is in compliance with Rust's style guidelines by running</p> <pre><code>$ ./x test tidy --bless </code></pre> <p>We recommend to make this check before every pull request (and every new commit in a pull request); you can add <a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks">git hooks</a> before every push to make sure you never forget to make this check. The CI will also run tidy and will fail if tidy fails.</p> <p>Rust follows a <em>no merge-commit policy</em>, meaning, when you encounter merge conflicts you are expected to always rebase instead of merging. E.g. always use rebase when bringing the latest changes from the master branch to your feature branch.</p> <p>If you encounter merge conflicts or when a reviewer asks you to perform some changes, your PR will get marked as <code>S-waiting-on-author</code>. When you resolve them, you should use <code>@rustbot</code> to mark it as <code>S-waiting-on-review</code>:</p> <pre><code>@rustbot label -S-waiting-on-author +S-waiting-on-review </code></pre> <p>See <a href="./rustbot.html#issue-relabeling">this chapter</a> for more details.</p> <p>GitHub allows <a href="https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue">closing issues using keywords</a>. This feature should be used to keep the issue tracker tidy. However, it is generally preferred to put the "closes #123" text in the PR description rather than the issue commit; particularly during rebasing, citing the issue number in the commit can "spam" the issue in question.</p> <h2 id="external-dependencies"><a class="header" href="#external-dependencies">External dependencies</a></h2> <p>This section has moved to <a href="./external-repos.html">"Using External Repositories"</a>.</p> <h2 id="writing-documentation"><a class="header" href="#writing-documentation">Writing documentation</a></h2> <p>Documentation improvements are very welcome. The source of <code>doc.rust-lang.org</code> is located in <a href="https://github.com/rust-lang/rust/tree/master/src/doc"><code>src/doc</code></a> in the tree, and standard API documentation is generated from the source code itself (e.g. <a href="https://github.com/rust-lang/rust/blob/master/library/std/src/lib.rs#L1"><code>library/std/src/lib.rs</code></a>). Documentation pull requests function in the same way as other pull requests.</p> <p>To find documentation-related issues, sort by the <a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen%20is%3Aissue%20label%3AA-docs">A-docs label</a>.</p> <p>You can find documentation style guidelines in <a href="https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text">RFC 1574</a>.</p> <p>To build the standard library documentation, use <code>x doc --stage 0 library --open</code>. To build the documentation for a book (e.g. the unstable book), use <code>x doc src/doc/unstable-book.</code> Results should appear in <code>build/host/doc</code>, as well as automatically open in your default browser. See <a href="./building/compiler-documenting.html#building-documentation">Building Documentation</a> for more information.</p> <p>You can also use <code>rustdoc</code> directly to check small fixes. For example, <code>rustdoc src/doc/reference.md</code> will render reference to <code>doc/reference.html</code>. The CSS might be messed up, but you can verify that the HTML is right.</p> <h3 id="contributing-to-rustc-dev-guide"><a class="header" href="#contributing-to-rustc-dev-guide">Contributing to rustc-dev-guide</a></h3> <p>Contributions to the <a href="https://rustc-dev-guide.rust-lang.org/">rustc-dev-guide</a> are always welcome, and can be made directly at <a href="https://github.com/rust-lang/rustc-dev-guide">the rust-lang/rustc-dev-guide repo</a>. The issue tracker in that repo is also a great way to find things that need doing. There are issues for beginners and advanced compiler devs alike!</p> <p>Just a few things to keep in mind:</p> <ul> <li> <p>Please limit line length to 100 characters. This is enforced by CI, and you can run the checks locally with <code>ci/lengthcheck.sh</code>.</p> </li> <li> <p>When contributing text to the guide, please contextualize the information with some time period and/or a reason so that the reader knows how much to trust or mistrust the information. Aim to provide a reasonable amount of context, possibly including but not limited to:</p> <ul> <li> <p>A reason for why the data may be out of date other than "change", as change is a constant across the project.</p> </li> <li> <p>The date the comment was added, e.g. instead of writing <em>"Currently, ..."</em> or <em>"As of now, ..."</em>, consider adding the date, in one of the following formats:</p> <ul> <li>Jan 2021</li> <li>January 2021</li> <li>jan 2021</li> <li>january 2021</li> </ul> <p>There is a CI action (in <code>~/.github/workflows/date-check.yml</code>) that generates a monthly issue with any of these that are over 6 months old.</p> <p>For the action to pick the date, add a special annotation before specifying the date:</p> <pre><code class="language-md"><!-- date-check --> Jan 2023 </code></pre> <p>Example:</p> <pre><code class="language-md">As of <!-- date-check --> Jan 2023, the foo did the bar. </code></pre> <p>For cases where the date should not be part of the visible rendered output, use the following instead:</p> <pre><code class="language-md"><!-- date-check: Jan 2023 --> </code></pre> </li> <li> <p>A link to a relevant WG, tracking issue, <code>rustc</code> rustdoc page, or similar, that may provide further explanation for the change process or a way to verify that the information is not outdated.</p> </li> </ul> </li> <li> <p>If a text grows rather long (more than a few page scrolls) or complicated (more than four subsections) it might benefit from having a Table of Contents at the beginning, which you can auto-generate by including the <code><!-- toc --></code> marker.</p> </li> </ul> <h2 id="issue-triage"><a class="header" href="#issue-triage">Issue triage</a></h2> <p>Sometimes, an issue will stay open, even though the bug has been fixed. And sometimes, the original bug may go stale because something has changed in the meantime.</p> <p>It can be helpful to go through older bug reports and make sure that they are still valid. Load up an older issue, double check that it's still true, and leave a comment letting us know if it is or is not. The <a href="https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc">least recently updated sort</a> is good for finding issues like this.</p> <p><a href="./rustbot.html">Thanks to <code>@rustbot</code></a>, anyone can help triage issues by adding appropriate labels to issues that haven't been triaged yet:</p> <style> .label-color { border-radius:0.5em; } table td:nth-child(2) { white-space: nowrap; } </style> <div class="table-wrapper"><table><thead><tr><th>Labels</th><th>Color</th><th>Description</th></tr></thead><tbody> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=A">A-</a></td><td><span class="label-color" style="background-color:#f7e101;"> </span> Yellow</td><td>The <strong>area</strong> of the project an issue relates to.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=B">B-</a></td><td><span class="label-color" style="background-color:#d304cb;"> </span> Magenta</td><td>Issues which are <strong>blockers</strong>.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=beta">beta-</a></td><td><span class="label-color" style="background-color:#1e76d9;"> </span> Dark Blue</td><td>Tracks changes which need to be <a href="https://forge.rust-lang.org/release/backporting.html#beta-backporting-in-rust-langrust">backported to beta</a></td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=C">C-</a></td><td><span class="label-color" style="background-color:#f5f1fd;"> </span> Light Purple</td><td>The <strong>category</strong> of an issue.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=D">D-</a></td><td><span class="label-color" style="background-color:#c9f7a3;"> </span> Mossy Green</td><td>Issues for <strong>diagnostics</strong>.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=E">E-</a></td><td><span class="label-color" style="background-color:#02e10c;"> </span> Green</td><td>The <strong>experience</strong> level necessary to fix an issue.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=F">F-</a></td><td><span class="label-color" style="background-color:#f9c0cc;"> </span> Peach</td><td>Issues for <strong>nightly features</strong>.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=I">I-</a></td><td><span class="label-color" style="background-color:#e10c02;"> </span> Red</td><td>The <strong>importance</strong> of the issue.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=nominated">I-*-nominated</a></td><td><span class="label-color" style="background-color:#e10c02;"> </span> Red</td><td>The issue has been nominated for discussion at the next meeting of the corresponding team.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/I-prioritize">I-prioritize</a></td><td><span class="label-color" style="background-color:#e10c02;"> </span> Red</td><td>The issue has been nominated for prioritization by the team tagged with a <strong>T</strong>-prefixed label.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/metabug">metabug</a></td><td><span class="label-color" style="background-color:#5319e7;"> </span> Purple</td><td>Bugs that collect other bugs.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=O">O-</a></td><td><span class="label-color" style="background-color:#6e6ec0;"> </span> Purple Grey</td><td>The <strong>operating system</strong> or platform that the issue is specific to.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=P">P-</a></td><td><span class="label-color" style="background-color:#eb6420;"> </span> Orange</td><td>The issue <strong>priority</strong>. These labels can be assigned by anyone that understand the issue and is able to prioritize it, and remove the <a href="https://github.com/rust-lang/rust/labels/I-prioritize">I-prioritize</a> label.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=regression">regression-</a></td><td><span class="label-color" style="background-color:#e4008a;"> </span> Pink</td><td>Tracks regressions from a stable release.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/relnotes">relnotes</a></td><td><span class="label-color" style="background-color:#fad8c7;"> </span> Light Orange</td><td>Changes that should be documented in the release notes of the next release.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=S">S-</a></td><td><span class="label-color" style="background-color:#d3dddd;"> </span> Gray</td><td>Tracks the <strong>status</strong> of pull requests.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=s-tracking">S-tracking-</a></td><td><span class="label-color" style="background-color:#4682b4;"> </span> Steel Blue</td><td>Tracks the <strong>status</strong> of <a href="https://github.com/rust-lang/rust/labels/C-tracking-issue">tracking issues</a>.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=stable">stable-</a></td><td><span class="label-color" style="background-color:#00229c;"> </span> Dark Blue</td><td>Tracks changes which need to be <a href="https://forge.rust-lang.org/release/backporting.html#stable-backporting-in-rust-langrust">backported to stable</a> in anticipation of a point release.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=T">T-</a></td><td><span class="label-color" style="background-color:#bfd4f2;"> </span> Blue</td><td>Denotes which <strong>team</strong> the issue belongs to.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels?q=WG">WG-</a></td><td><span class="label-color" style="background-color:#c2e0c6;"> </span> Green</td><td>Denotes which <strong>working group</strong> the issue belongs to.</td></tr> </tbody></table> </div> <h3 id="rfcbot-labels"><a class="header" href="#rfcbot-labels">Rfcbot labels</a></h3> <p><a href="https://github.com/anp/rfcbot-rs/">rfcbot</a> uses its own labels for tracking the process of coordinating asynchronous decisions, such as approving or rejecting a change. This is used for <a href="https://github.com/rust-lang/rfcs">RFCs</a>, issues, and pull requests.</p> <div class="table-wrapper"><table><thead><tr><th>Labels</th><th>Color</th><th>Description</th></tr></thead><tbody> <tr><td><a href="https://github.com/rust-lang/rust/labels/proposed-final-comment-period">proposed-final-comment-period</a></td><td><span class="label-color" style="background-color:#ededed;"> </span> Gray</td><td>Currently awaiting signoff of all team members in order to enter the final comment period.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/disposition-merge">disposition-merge</a></td><td><span class="label-color" style="background-color:#008800;"> </span> Green</td><td>Indicates the intent is to merge the change.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/disposition-close">disposition-close</a></td><td><span class="label-color" style="background-color:#dd0000;"> </span> Red</td><td>Indicates the intent is to not accept the change and close it.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/disposition-postpone">disposition-postpone</a></td><td><span class="label-color" style="background-color:#ededed;"> </span> Gray</td><td>Indicates the intent is to not accept the change at this time and postpone it to a later date.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/final-comment-period">final-comment-period</a></td><td><span class="label-color" style="background-color:#1e76d9;"> </span> Blue</td><td>Currently soliciting final comments before merging or closing.</td></tr> <tr><td><a href="https://github.com/rust-lang/rust/labels/finished-final-comment-period">finished-final-comment-period</a></td><td><span class="label-color" style="background-color:#f9e189;"> </span> Light Yellow</td><td>The final comment period has concluded, and the issue will be merged or closed.</td></tr> <tr><td><a href="https://github.com/rust-lang/rfcs/labels/postponed">postponed</a></td><td><span class="label-color" style="background-color:#fbca04;"> </span> Yellow</td><td>The issue has been postponed.</td></tr> <tr><td><a href="https://github.com/rust-lang/rfcs/labels/closed">closed</a></td><td><span class="label-color" style="background-color:#dd0000;"> </span> Red</td><td>The issue has been rejected.</td></tr> <tr><td><a href="https://github.com/rust-lang/rfcs/labels/to-announce">to-announce</a></td><td><span class="label-color" style="background-color:#ededed;"> </span> Gray</td><td>Issues that have finished their final-comment-period and should be publicly announced. Note: the rust-lang/rust repository uses this label differently, to announce issues at the triage meetings.</td></tr> </tbody></table> </div> <h2 id="helpful-links-and-information"><a class="header" href="#helpful-links-and-information">Helpful links and information</a></h2> <p>This section has moved to the <a href="about-this-guide.html#other-places-to-find-information">"About this guide"</a> chapter.</p> </main> <nav class="nav-wrapper" aria-label="Page navigation"> <!-- Mobile navigation buttons --> <a rel="prev" href="crates-io.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> <i class="fa fa-angle-left"></i> </a> <a rel="next" href="compiler-team.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> <i class="fa fa-angle-right"></i> </a> <div style="clear: both"></div> </nav> </div> </div> <nav class="nav-wide-wrapper" aria-label="Page navigation"> <a rel="prev" href="crates-io.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> <i class="fa fa-angle-left"></i> </a> <a rel="next" href="compiler-team.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> <i class="fa fa-angle-right"></i> </a> </nav> </div> <script type="text/javascript"> window.playground_copyable = true; </script> <script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script> <script src="mark.min.js" type="text/javascript" charset="utf-8"></script> <script src="searcher.js" type="text/javascript" charset="utf-8"></script> <script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script> <script src="highlight.js" type="text/javascript" charset="utf-8"></script> <script src="book.js" type="text/javascript" charset="utf-8"></script> <!-- Custom JS scripts --> <script type="text/javascript" src="mermaid.min.js"></script> <script type="text/javascript" src="mermaid-init.js"></script> </body> </html> About
A guide to how rustc works and how to contribute to it.
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- HTML 99.9%
- Other 0.1%