[−][src]Function tao_of_rust::ch05::nll::mir_explain
pub fn mir_explain()
MIR 介绍
Base usage: 用于生成MIR
fn main(){ let a = "hello".to_string(); let s = " world"; a.to_string() + s; }Run
Base usage: 生成的MIR
// MIR 解释 fn main() -> (){ let mut _0: (); // 返回值 scope 1 { // 第一个变量产生的顶级作用域,会包裹其他变量 } scope 2 { // a自己的作用域 let _1: i32; } let mut _2: i32; // 临时值 let mut _3: i32; let mut _4: (i32, bool); bb0: { // 基础块 StorageLive(_1); // 语句,代表活跃,给LLVM用来分配栈空间 _1 = const 1i32; // 赋值 StorageLive(_3); _3 = _1; // 使用临时变量 // 执行Add操作,具有防溢出检查, // 其中move代表move语义,编译器会自己判断是不是Copy _4 = CheckedAdd(move _3, const 2i32); // 断言,溢出时抛出错误,并且流向bb1块,此为终止句 assert(!move (_4.1: bool), "attempt to add with overflow") -> bb1; } bb1: { // 基础块 _2 = move (_4.0: i32); // 赋值,move为右值默认语义 StorageDead(_3); // 语句,代表不活跃,给LLVM用来分配栈空间 StorageDead(_1); return; // 返回 } }Run