r? @nikomatsakis
Textual MIR can be dumped for a particular `fn` with `#![rustc_mir(pretty = "filename.mir")]`. Below is an example of the text output.
```rust
struct Point {
x: i32,
y: i32,
}
fn example() -> Point {
let mut e = Point { x: 1, y: 2 };
let num = 5;
let plus_num = |x: i32| x + num;
e.y = plus_num(e.x);
e
}
```
```rust
fn() -> Point {
let mut var0: Point; // e
let var1: i32; // num
let var2: [closure@test.rs:84:20: 84:36 num:&i32]; // plus_num
let mut tmp0: ();
let mut tmp1: &i32;
let mut tmp2: ();
let mut tmp3: i32;
let mut tmp4: &[closure@test.rs:84:20: 84:36 num:&i32];
let mut tmp5: i32;
let mut tmp6: Point;
bb0: {
var0 = Point { x: 1, y: 2 };
var1 = 5;
tmp1 = &var1;
var2 = [closure@test.rs:84:20: 84:36] { num: tmp1 };
tmp4 = &var2;
tmp5 = var0.0;
tmp3 = tmp4(tmp5) -> [return: bb3, unwind: bb4];
}
bb1: {
return;
}
bb2: {
diverge;
}
bb3: {
drop var0.1;
var0.1 = tmp3;
drop tmp2;
drop var2;
drop var0;
tmp6 = var0;
return = tmp6;
drop tmp6;
goto -> bb1;
}
bb4: {
drop var2;
goto -> bb5;
}
bb5: {
drop var0;
goto -> bb2;
}
}
```
```rust
fn(arg0: &[closure@test.rs:84:20: 84:36 num:&i32], arg1: i32) -> i32 {
let var0: i32; // x
let mut tmp0: ();
let mut tmp1: i32;
let mut tmp2: i32;
bb0: {
var0 = arg1;
tmp1 = var0;
tmp2 = (*(*arg0).0);
return = Add(tmp1, tmp2);
goto -> bb1;
}
bb1: {
return;
}
bb2: {
diverge;
}
}
```