@@ -306,6 +306,40 @@ steps, meaning it will have two precompiled compilers: stage0 compiler and `down
306306for ` stage > 0 ` steps. This way, it will never need to build the in-tree compiler. As a result, your
307307build time will be significantly reduced by not building the in-tree compiler.
308308
309+ ## Faster rebuilds with ` --keep-stage-std `
310+
311+ Sometimes just checking whether the compiler builds is not enough. A common
312+ example is that you need to add a ` debug! ` statement to inspect the value of
313+ some state or better understand the problem. In that case, you don't really need
314+ a full build. By bypassing bootstrap's cache invalidation, you can often get
315+ these builds to complete very fast (e.g., around 30 seconds). The only catch is
316+ this requires a bit of fudging and may produce compilers that don't work (but
317+ that is easily detected and fixed).
318+
319+ The sequence of commands you want is as follows:
320+
321+ - Initial build: ` ./x build library `
322+ - Subsequent builds: ` ./x build library --keep-stage-std=1 `
323+ - Note that we added the ` --keep-stage-std=1 ` flag here
324+
325+ As mentioned, the effect of ` --keep-stage-std=1 ` is that we just _ assume_ that the
326+ old standard library can be re-used. If you are editing the compiler, this is
327+ often true: you haven't changed the standard library, after all. But
328+ sometimes, it's not true: for example, if you are editing the "metadata" part of
329+ the compiler, which controls how the compiler encodes types and other states
330+ into the ` rlib ` files, or if you are editing things that wind up in the metadata
331+ (such as the definition of the MIR).
332+
333+ ** The TL;DR is that you might get weird behavior from a compile when using
334+ ` --keep-stage-std=1 ` ** -- for example, strange [ ICEs] ( ../appendix/glossary.html#ice )
335+ or other panics. In that case, you should simply remove the ` --keep-stage-std=1 `
336+ from the command and rebuild. That ought to fix the problem.
337+
338+ You can also use ` --keep-stage-std=1 ` when running tests. Something like this:
339+
340+ - Initial test run: ` ./x test tests/ui `
341+ - Subsequent test run: ` ./x test tests/ui --keep-stage-std=1 `
342+
309343## Using incremental compilation
310344
311345You can further enable the ` --incremental ` flag to save additional time in
0 commit comments