在Rust中,默认情况是内存崩溃.你应该用options(nomem)
来 Select 退出.
pub unsafe fn no_nomem() {
std::arch::asm!("");
}
pub unsafe fn nomem() {
std::arch::asm!("", options(nomem));
}
LLVM IR:
define void @_ZN7example8no_nomem17h95b023e6c43118daE() unnamed_addr #0 !dbg !5 {
call void asm sideeffect alignstack inteldialect "", "~{dirflag},~{fpsr},~{flags},~{memory}"(), !dbg !10, !srcloc !11
br label %bb1, !dbg !10
bb1: ; preds = %start
ret void, !dbg !12
}
define void @_ZN7example5nomem17hc75cf2d808290004E() unnamed_addr #0 !dbg !13 {
call void asm sideeffect alignstack inteldialect "", "~{dirflag},~{fpsr},~{flags}"() #1, !dbg !14, !srcloc !15
br label %bb1, !dbg !14
bb1: ; preds = %start
ret void, !dbg !16
}
没有nomem
的函数发出~{memory}
势垒.