在转换为LLVM-IR时会产生异常处理的简单Rust应用程序的最全面的示例是什么?
具体来说,我正在尝试观察Rust如何生成/管理调用,着陆垫和展开。类似于:
invoke void@maythrow()
to label %try.cont
unwind label %dispatch.a
dispatch.a:
%cpA=catchpad[%rtti.A* @A.Type]
to label %handle.a
unwind label %dispatch.b
handle.a:
invoke void@handleA()
to label %catchret.a
unwind label %catchend
catchret.a:
catchret %cpA to label %exit
dispatch.b:
%cpB=catchpad[%rtti.B* @B.Type]
to label %handle.b
unwind label %dispatch.b
handle.b:
invoke void@handleB()
to label %catchret.b
unwind label %catchend
catchret.b:
catchret %cpB to label %exit
我想避免查看Rust的源代码,这就是我要求这样一个例子的原因。
编辑: 由于以下文章我希望Rust能够依赖这些说明:1,2以及-Z标志中的no-landing-pad选项。
编辑:quick search到Rust源代码也表明它是以某种方式生成的。