如何观察Rust生成的LLVM-IR中的异常处理

时间:2016-06-07 09:26:36

标签: rust llvm-ir

在转换为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能够依赖这些说明:12以及-Z标志中的no-landing-pad选项。

编辑:quick search到Rust源代码也表明它是以某种方式生成的。

0 个答案:

没有答案