Skip to content

Commit 3586e4a

Browse files
Rollup merge of #133732 - nnethercote:fix-Z-dump-mir-dataflow, r=compiler-errors
Fix `-Zdump-mir-dataflow` r? `@cjgillot`
2 parents 8a26a8b + cecef13 commit 3586e4a

File tree

7 files changed

+19
-21
lines changed

7 files changed

+19
-21
lines changed

compiler/rustc_mir_dataflow/src/framework/cursor.rs

-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ pub enum ResultsHandle<'a, 'tcx, A>
1515
where
1616
A: Analysis<'tcx>,
1717
{
18-
Borrowed(&'a Results<'tcx, A>),
1918
BorrowedMut(&'a mut Results<'tcx, A>),
2019
Owned(Results<'tcx, A>),
2120
}
@@ -28,7 +27,6 @@ where
2827

2928
fn deref(&self) -> &Results<'tcx, A> {
3029
match self {
31-
ResultsHandle::Borrowed(borrowed) => borrowed,
3230
ResultsHandle::BorrowedMut(borrowed) => borrowed,
3331
ResultsHandle::Owned(owned) => owned,
3432
}
@@ -41,9 +39,6 @@ where
4139
{
4240
fn deref_mut(&mut self) -> &mut Results<'tcx, A> {
4341
match self {
44-
ResultsHandle::Borrowed(_borrowed) => {
45-
panic!("tried to deref_mut a `ResultsHandle::Borrowed")
46-
}
4742
ResultsHandle::BorrowedMut(borrowed) => borrowed,
4843
ResultsHandle::Owned(owned) => owned,
4944
}

compiler/rustc_mir_dataflow/src/framework/graphviz.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ 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);

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
}

compiler/rustc_mir_dataflow/src/framework/results.rs

+3-12
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,9 @@ impl<'tcx, A> Results<'tcx, A>
3737
where
3838
A: Analysis<'tcx>,
3939
{
40-
/// Creates a `ResultsCursor` that can inspect these `Results`. Immutably borrows the `Results`,
41-
/// which is appropriate when the `Results` is used outside the cursor.
40+
/// Creates a `ResultsCursor` that mutably borrows the `Results`, which is appropriate when the
41+
/// `Results` is also used outside the cursor.
4242
pub fn as_results_cursor<'mir>(
43-
&'mir self,
44-
body: &'mir mir::Body<'tcx>,
45-
) -> ResultsCursor<'mir, 'tcx, A> {
46-
ResultsCursor::new(body, ResultsHandle::Borrowed(self))
47-
}
48-
49-
/// Creates a `ResultsCursor` that can mutate these `Results`. Mutably borrows the `Results`,
50-
/// which is appropriate when the `Results` is used outside the cursor.
51-
pub fn as_results_cursor_mut<'mir>(
5243
&'mir mut self,
5344
body: &'mir mir::Body<'tcx>,
5445
) -> ResultsCursor<'mir, 'tcx, A> {
@@ -95,7 +86,7 @@ where
9586
pub(super) fn write_graphviz_results<'tcx, A>(
9687
tcx: TyCtxt<'tcx>,
9788
body: &mir::Body<'tcx>,
98-
results: &Results<'tcx, A>,
89+
results: &mut Results<'tcx, A>,
9990
pass_name: Option<&'static str>,
10091
) -> std::io::Result<()>
10192
where

compiler/rustc_mir_transform/src/coroutine.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ fn locals_live_across_suspend_points<'tcx>(
680680
let mut requires_storage_results =
681681
MaybeRequiresStorage::new(borrowed_locals_results.into_results_cursor(body))
682682
.iterate_to_fixpoint(tcx, body, None);
683-
let mut requires_storage_cursor = requires_storage_results.as_results_cursor_mut(body);
683+
let mut requires_storage_cursor = requires_storage_results.as_results_cursor(body);
684684

685685
// Calculate the liveness of MIR locals ignoring borrows.
686686
let mut liveness =
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
digraph graph_for_def_id_0_3 {
2+
graph[fontname="Courier, monospace"];
3+
node[fontname="Courier, monospace"];
4+
edge[fontname="Courier, monospace"];
5+
bb_0[label=<<table border="1" cellborder="1" cellspacing="0" cellpadding="3" sides="rb"><tr><td colspan="3" sides="tl">bb0</td></tr><tr><td colspan="2" bgcolor="#a0a0a0" sides="tl">MIR</td><td bgcolor="#a0a0a0" sides="tl">STATE</td></tr><tr><td valign="bottom" sides="tl" align="right"></td><td valign="bottom" sides="tl" align="left">(on start)</td><td colspan="1" valign="bottom" sides="tl" align="left">{}</td></tr><tr><td valign="top" sides="tl" bgcolor="#f0f0f0" align="right">0</td><td valign="top" sides="tl" bgcolor="#f0f0f0" align="left">_0 = const ()</td><td valign="top" sides="tl" bgcolor="#f0f0f0" align="left"><font color="darkgreen">+_0</font></td></tr><tr><td valign="top" sides="tl" align="right">T</td><td valign="top" sides="tl" align="left">return</td><td valign="top" sides="tl" align="left"></td></tr><tr><td valign="bottom" sides="tl" bgcolor="#f0f0f0" align="right"></td><td valign="bottom" sides="tl" bgcolor="#f0f0f0" align="left">(on end)</td><td colspan="1" valign="bottom" sides="tl" bgcolor="#f0f0f0" align="left">{_0}</td></tr></table>>][shape="none"];
6+
}

tests/mir-opt/dataflow.rs

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// skip-filecheck
2+
// Test graphviz dataflow output
3+
//@ compile-flags: -Z dump-mir=main -Z dump-mir-dataflow
4+
5+
// EMIT_MIR dataflow.main.maybe_init.borrowck.dot
6+
fn main() {}

0 commit comments

Comments
 (0)