Skip to content

Commit d37ed10

Browse files
committed
Fix crash with -Zdump-mir-dataflow
As of #133155 `Formatter:new` uses `as_results_cursor` to create a non-mutable results reference, and then later that is accessed via `deref_mut` which results in a runtime abort. Changing to `as_results_cursor_mut` fixes it. Fixes #133641.
1 parent 5e1440a commit d37ed10

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

Diff for: compiler/rustc_mir_dataflow/src/framework/graphviz.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ where
4747
{
4848
pub(crate) fn new(
4949
body: &'mir Body<'tcx>,
50-
results: &'mir Results<'tcx, A>,
50+
results: &'mir mut Results<'tcx, A>,
5151
style: OutputStyle,
5252
) -> Self {
5353
let reachable = mir::traversal::reachable_as_bitset(body);
54-
Formatter { cursor: results.as_results_cursor(body).into(), style, reachable }
54+
Formatter { cursor: results.as_results_cursor_mut(body).into(), style, reachable }
5555
}
5656

5757
fn body(&self) -> &'mir Body<'tcx> {

Diff for: compiler/rustc_mir_dataflow/src/framework/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,10 @@ pub trait Analysis<'tcx> {
281281
);
282282
}
283283

284-
let results = Results { analysis: self, entry_sets };
284+
let mut results = Results { analysis: self, entry_sets };
285285

286286
if tcx.sess.opts.unstable_opts.dump_mir_dataflow {
287-
let res = write_graphviz_results(tcx, body, &results, pass_name);
287+
let res = write_graphviz_results(tcx, body, &mut results, pass_name);
288288
if let Err(e) = res {
289289
error!("Failed to write graphviz dataflow results: {}", e);
290290
}

Diff for: compiler/rustc_mir_dataflow/src/framework/results.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ where
9595
pub(super) fn write_graphviz_results<'tcx, A>(
9696
tcx: TyCtxt<'tcx>,
9797
body: &mir::Body<'tcx>,
98-
results: &Results<'tcx, A>,
98+
results: &mut Results<'tcx, A>,
9999
pass_name: Option<&'static str>,
100100
) -> std::io::Result<()>
101101
where

0 commit comments

Comments
 (0)