-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Implement --unpretty mir #31656
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement --unpretty mir #31656
Conversation
r? @arielb1 (rust_highfive has picked a reviewer for you, use r? to override) |
let mir_map = mir_map.unwrap(); | ||
|
||
for (nodeid, mir) in &mir_map.map { | ||
try!(writeln!(out, "MIR for {}", tcx.map.node_to_string(*nodeid))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: I personally think the MIR pretty writer should be adapted to somehow work on MIR maps by e.g. outputting
fn main::main() -> ... {
...
}
for functions and
λ main::main::1(... {
}
for closures as well as improving the way closures are printed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed. That would require passing both the HIR and MIR map, as well as some custom formatting, so I'll leave that to another PR.
r? @nrc |
@bors: r+ |
📌 Commit 67aa7b2 has been approved by |
This allows obtaining a textual MIR dump for individual items or all items in the crate. I haven't added any tests since ~~I'm too lazy~~ this is an unstable debugging option, but I'll add one if required. MIR for a single function can now be dumped using `rustc -Zunstable-options --unpretty mir=my_function` and no longer requires the use of in-source `#[rustc_mir]` attributes. Blocks rust-lang/rust-playpen#154 (if MIR dump support from the playpen is even wanted). Example output: ```rust fn main() { let x = Some(0); x.unwrap_or_else(|| 1); } ``` ``` MIR for expr || 1 (id=16) fn(arg0: [[email protected]:3:22: 3:26]) -> i32 { let mut tmp0: (); bb0: { return = const 1; goto -> bb1; } bb1: { return; } } MIR for fn main::main (id=4) fn() -> () { let var0: core::option::Option<i32>; // x let mut tmp0: (); let mut tmp1: i32; let mut tmp2: core::option::Option<i32>; let mut tmp3: [[email protected]:3:22: 3:26]; bb0: { var0 = core::option::Option::Some(const 0); tmp2 = var0; tmp3 = [[email protected]:3:22: 3:26]; tmp1 = core::option::Option<T>::unwrap_or_else(tmp2, tmp3) -> bb2; } bb1: { return; } bb2: { drop(tmp1) -> bb3; } bb3: { return = (); goto -> bb1; } } ```
This allows obtaining a textual MIR dump for individual items or all items in the crate.
I haven't added any tests since
I'm too lazythis is an unstable debugging option, but I'll add one if required.MIR for a single function can now be dumped using
rustc -Zunstable-options --unpretty mir=my_function
and no longer requires the use of in-source#[rustc_mir]
attributes.Blocks rust-lang/rust-playpen#154 (if MIR dump support from the playpen is even wanted).
Example output: