From 9b6297c5132f01b74128e07adf0e5675943f8eda Mon Sep 17 00:00:00 2001 From: Amanda Stjerna Date: Mon, 17 Aug 2026 16:12:54 +0200 Subject: [PATCH 1/6] Update compiler-debugging.md Add a hint about unflatten and an internal link to MIR outlives graphs to advertise them better. --- src/compiler-debugging.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/compiler-debugging.md b/src/compiler-debugging.md index e73a14414..7f9942de6 100644 --- a/src/compiler-debugging.md +++ b/src/compiler-debugging.md @@ -315,7 +315,19 @@ $ dot -T pdf maybe_init_suffix.dot > maybe_init_suffix.pdf $ firefox maybe_init_suffix.pdf # Or your favorite pdf viewer ``` -### Debugging type layouts +Graphviz also comes with a preprocessor program, +[`unflatten`](https://graphviz.org/docs/cli/unflatten/), that +sometimes helps making the outputs look less oddly spread out. It reads +a dot file and outputs another dot file, so you can use it in a pipe, +e.g: +``` +$ unflatten mir_dump/*.foo.-------.nll.0.regioncx.all.dot | dot -Tpdf -o foo-outlives.pdf +``` + +This is particularly useful for complicated region outlives graphs from +[the borrow checker](borrow_check/debugging.md). + +## Narrowing (Bisecting) Regressions The internal attribute `#[rustc_dump_layout(...)]` can be used to dump the [`Layout`] of the type it is attached to. From 9864bc236a1c230b6796935de850374fd638df40 Mon Sep 17 00:00:00 2001 From: Amanda Stjerna Date: Tue, 30 Apr 2024 11:49:16 +0200 Subject: [PATCH 2/6] Update dataflow.md to mention region graphs --- src/mir/dataflow.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mir/dataflow.md b/src/mir/dataflow.md index 651de63e5..fbfd93a3d 100644 --- a/src/mir/dataflow.md +++ b/src/mir/dataflow.md @@ -178,6 +178,21 @@ See the example below: ![A graphviz diagram for a dataflow analysis](../img/dataflow-graphviz-example.png) +### Region Constraint Graphs and Their Strongly Connected Components + +With `-Z dump-mir-graphviz=yes`, you will also get Graphviz files for the outlives constraints +of the MIR bodies you asked for, as well as the strongly connected components (SCCs) on them. +They are available as +`mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.all.dot` and +`mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.scc.dot` respectively. For both +graphs, named region variables will be shown with their external name (such as `'static`) +shown in parenthesis. For region inference variables in universes other than the root universe, +they will be shown as `/U13` (for universe 13). In the region graph, edges are labelled with +the MIR locations where the relationship holds. + +**Note:** there are implicit edges from `'static` to every region, but those are not rendered +in the region graph to avoid clutter. They *do* however show up in the SCC graph. + ["gen-kill" problems]: https://en.wikipedia.org/wiki/Data-flow_analysis#Bit_vector_problems [*Static Program Analysis*]: https://cs.au.dk/~amoeller/spa/ [Debugging MIR]: ./debugging.md From 9a8ab4e4a8f0376a0b28ddc27bb0301225d4a344 Mon Sep 17 00:00:00 2001 From: Amanda Stjerna Date: Thu, 2 May 2024 10:53:57 +0200 Subject: [PATCH 3/6] Add images of graphs --- src/img/region-graphviz.png | Bin 0 -> 34530 bytes src/img/scc-graphviz.png | Bin 0 -> 42978 bytes src/mir/dataflow.md | 15 ++++++++++----- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 src/img/region-graphviz.png create mode 100644 src/img/scc-graphviz.png diff --git a/src/img/region-graphviz.png b/src/img/region-graphviz.png new file mode 100644 index 0000000000000000000000000000000000000000..b63f30f53a0e692c2e9be8d765582b42e55593ab GIT binary patch literal 34530 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 F0RTCv?$`hT literal 0 HcmV?d00001 diff --git a/src/mir/dataflow.md b/src/mir/dataflow.md index fbfd93a3d..44056e63b 100644 --- a/src/mir/dataflow.md +++ b/src/mir/dataflow.md @@ -180,18 +180,23 @@ See the example below: ### Region Constraint Graphs and Their Strongly Connected Components +![A graph showing a small number of regions with their outlives relations](../img/region-graphviz.png) + With `-Z dump-mir-graphviz=yes`, you will also get Graphviz files for the outlives constraints of the MIR bodies you asked for, as well as the strongly connected components (SCCs) on them. -They are available as +They are available as `mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.all.dot` and `mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.scc.dot` respectively. For both graphs, named region variables will be shown with their external name (such as `'static`) shown in parenthesis. For region inference variables in universes other than the root universe, -they will be shown as `/U13` (for universe 13). In the region graph, edges are labelled with -the MIR locations where the relationship holds. +they will be shown as `/U13` (for universe 13). In the region graph, edges are labelled with +the MIR locations where the relationship holds, or `All` if it's everywhere. + +![A graph showing a small number of strongly connected components on the region-outlives-graph above](../img/scc-graphviz.png) -**Note:** there are implicit edges from `'static` to every region, but those are not rendered -in the region graph to avoid clutter. They *do* however show up in the SCC graph. +**Note:** There are implicit edges from `'static` to every region, but those are not rendered +in the region graph to avoid clutter. They _do_ however show up in the SCC graph. This is why there are outgoing edges from SCC(5) in the SCC graph above +that do not seem to have corresponding edges in the region outlives graph above. ["gen-kill" problems]: https://en.wikipedia.org/wiki/Data-flow_analysis#Bit_vector_problems [*Static Program Analysis*]: https://cs.au.dk/~amoeller/spa/ From 91f299dce91482cb1f36bd4c59e868d8ddcfaf20 Mon Sep 17 00:00:00 2001 From: Amanda Stjerna Date: Thu, 1 Aug 2024 13:38:37 +0200 Subject: [PATCH 4/6] Accept @lqd's nit about SCC edges MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rémy Rakic --- src/mir/dataflow.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mir/dataflow.md b/src/mir/dataflow.md index 44056e63b..49d0dd788 100644 --- a/src/mir/dataflow.md +++ b/src/mir/dataflow.md @@ -195,8 +195,7 @@ the MIR locations where the relationship holds, or `All` if it's everywhere. ![A graph showing a small number of strongly connected components on the region-outlives-graph above](../img/scc-graphviz.png) **Note:** There are implicit edges from `'static` to every region, but those are not rendered -in the region graph to avoid clutter. They _do_ however show up in the SCC graph. This is why there are outgoing edges from SCC(5) in the SCC graph above -that do not seem to have corresponding edges in the region outlives graph above. +in the region graph to avoid clutter. They _do_ however show up in the SCC graph. This is why there are outgoing edges from `SCC(5)` in the SCC graph that do not seem to have corresponding edges in the region outlives graph above. ["gen-kill" problems]: https://en.wikipedia.org/wiki/Data-flow_analysis#Bit_vector_problems [*Static Program Analysis*]: https://cs.au.dk/~amoeller/spa/ From a74435ec49792eebbce72f4942c60723a0d75345 Mon Sep 17 00:00:00 2001 From: Amanda Stjerna Date: Thu, 1 Aug 2024 13:38:56 +0200 Subject: [PATCH 5/6] Update src/mir/dataflow.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rémy Rakic --- src/mir/dataflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mir/dataflow.md b/src/mir/dataflow.md index 49d0dd788..246f56844 100644 --- a/src/mir/dataflow.md +++ b/src/mir/dataflow.md @@ -190,7 +190,7 @@ They are available as graphs, named region variables will be shown with their external name (such as `'static`) shown in parenthesis. For region inference variables in universes other than the root universe, they will be shown as `/U13` (for universe 13). In the region graph, edges are labelled with -the MIR locations where the relationship holds, or `All` if it's everywhere. +the MIR location where the relationship is required to hold, or `All` if the constraint should always be true. ![A graph showing a small number of strongly connected components on the region-outlives-graph above](../img/scc-graphviz.png) From 7b70f40a000058e9fcebf2dceeb0a1727d528863 Mon Sep 17 00:00:00 2001 From: Amanda Stjerna Date: Mon, 17 Aug 2026 16:17:18 +0200 Subject: [PATCH 6/6] Move Borrow checker debugging into its own chapter --- src/SUMMARY.md | 1 + src/borrow-check.md | 7 ++++++- src/borrow-check/debugging.md | 30 ++++++++++++++++++++++++++++++ src/compiler-debugging.md | 11 +++++++++-- src/mir/dataflow.md | 19 ------------------- 5 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 src/borrow-check/debugging.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 9c7c6ddec..920fad617 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -228,6 +228,7 @@ - [Closure constraints](./borrow-check/region-inference/closure-constraints.md) - [Error reporting (stub)](./borrow-check/region-inference/error-reporting.md) - [Two-phase-borrows](./borrow-check/two-phase-borrows.md) + - [Debugging the borrow checker](./borrow-check/debugging.md) - [Closure capture inference](./closure.md) - [Async closures/"coroutine-closures"](coroutine-closures.md) diff --git a/src/borrow-check.md b/src/borrow-check.md index 826bcf858..3e4e37015 100644 --- a/src/borrow-check.md +++ b/src/borrow-check.md @@ -24,7 +24,7 @@ HIR. Doing borrow checking on MIR has several advantages: [47366]: https://github.com/rust-lang/rust/issues/47366 [nll]: https://rust-lang.github.io/rfcs/2094-nll.html -### Major phases of the borrow checker +## Major phases of the borrow checker The borrow checker source is found in [the `rustc_borrowck` crate][b_c]. The main entry point is @@ -57,3 +57,8 @@ the [`mir_borrowck`] query. the previous analyses. [`replace_regions_in_mir`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/nll/fn.replace_regions_in_mir.html + + +## Debugging the borrow checker + +See [Debugging the borrow checker](borrow-check/debugging.md) and [MIR Debugging](mir/debugging.md). diff --git a/src/borrow-check/debugging.md b/src/borrow-check/debugging.md new file mode 100644 index 000000000..dac7821a5 --- /dev/null +++ b/src/borrow-check/debugging.md @@ -0,0 +1,30 @@ +# Debugging the borrow checker + +## Region Constraint Graphs and Their Strongly Connected Components + +![A graph showing a small number of regions with their outlives relations](../img/region-graphviz.png) + +With `-Z dump-mir-graphviz=yes`, you will also get Graphviz files for the outlives constraints +of the MIR bodies you asked for, as well as the strongly connected components (SCCs) on them. +They are available as +`mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.all.dot` and +`mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.scc.dot` respectively. For both +graphs, named region variables will be shown with their external name (such as `'static`) +shown in parenthesis. For region inference variables in universes other than the root universe, +they will be shown as `/U13` (for universe 13). In the region graph, edges are labelled with +the MIR location where the relationship is required to hold, or `All` if the constraint should +always be true. + +![A graph showing a small number of strongly connected components on the region- +outlives-graph above](../img/scc-graphviz.png) + +**Note:** There are implicit edges from `'static` to every region, but those are not +rendered +in the region graph to avoid clutter. They _do_ however show up in the SCC graph. +This is why there are outgoing edges from `SCC(5)` in the SCC graph that do not seem +to have corresponding edges in the region outlives graph above. + +## See also + +The [general instructions on debugging dataflow](../mir/dataflow.md) also apply to +graphs generated from borrowcheck data. diff --git a/src/compiler-debugging.md b/src/compiler-debugging.md index 7f9942de6..8bc4dbbd8 100644 --- a/src/compiler-debugging.md +++ b/src/compiler-debugging.md @@ -315,7 +315,7 @@ $ dot -T pdf maybe_init_suffix.dot > maybe_init_suffix.pdf $ firefox maybe_init_suffix.pdf # Or your favorite pdf viewer ``` -Graphviz also comes with a preprocessor program, +Graphviz also comes with a preprocessor program, [`unflatten`](https://graphviz.org/docs/cli/unflatten/), that sometimes helps making the outputs look less oddly spread out. It reads a dot file and outputs another dot file, so you can use it in a pipe, @@ -325,7 +325,11 @@ $ unflatten mir_dump/*.foo.-------.nll.0.regioncx.all.dot | dot -Tpdf -o foo-ou ``` This is particularly useful for complicated region outlives graphs from -[the borrow checker](borrow_check/debugging.md). +[the borrow checker](borrow-check/debugging.md). + +[An online Graphviz editor and visualiser is +also available](https://dreampuf.github.io/GraphvizOnline). + ## Narrowing (Bisecting) Regressions @@ -388,6 +392,9 @@ error: aborting due to previous error [`Layout`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_public/abi/struct.Layout.html +## Debugging borrowcheck + +Debugging the borrow checker has [its own chapter](borrow-check/debugging.md). ## Configuring CodeLLDB for debugging `rustc` diff --git a/src/mir/dataflow.md b/src/mir/dataflow.md index 246f56844..651de63e5 100644 --- a/src/mir/dataflow.md +++ b/src/mir/dataflow.md @@ -178,25 +178,6 @@ See the example below: ![A graphviz diagram for a dataflow analysis](../img/dataflow-graphviz-example.png) -### Region Constraint Graphs and Their Strongly Connected Components - -![A graph showing a small number of regions with their outlives relations](../img/region-graphviz.png) - -With `-Z dump-mir-graphviz=yes`, you will also get Graphviz files for the outlives constraints -of the MIR bodies you asked for, as well as the strongly connected components (SCCs) on them. -They are available as -`mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.all.dot` and -`mir_dump/rs-file-name.function-name.-------.nll.0.regioncx.scc.dot` respectively. For both -graphs, named region variables will be shown with their external name (such as `'static`) -shown in parenthesis. For region inference variables in universes other than the root universe, -they will be shown as `/U13` (for universe 13). In the region graph, edges are labelled with -the MIR location where the relationship is required to hold, or `All` if the constraint should always be true. - -![A graph showing a small number of strongly connected components on the region-outlives-graph above](../img/scc-graphviz.png) - -**Note:** There are implicit edges from `'static` to every region, but those are not rendered -in the region graph to avoid clutter. They _do_ however show up in the SCC graph. This is why there are outgoing edges from `SCC(5)` in the SCC graph that do not seem to have corresponding edges in the region outlives graph above. - ["gen-kill" problems]: https://en.wikipedia.org/wiki/Data-flow_analysis#Bit_vector_problems [*Static Program Analysis*]: https://cs.au.dk/~amoeller/spa/ [Debugging MIR]: ./debugging.md