14

我已阅读此博客文章此文档页面此示例,但我仍然不明白如何使用 LLVM 的 IRBuilder 为非 C++ 面向语言抛出基本异常。

据我了解,我必须:

  • 创建一个llvm::Value包含抛出的值。
  • 调用"a function",将抛出的值传递给它。此函数不会返回。

该示例使用系统倒带函数 ( _Unwind_RaiseException) 来引发 C++ 异常,我真的不明白如何使用我自己的引发函数(因为我只需要引发对象指针)。我错过了什么?

4

2 回答 2

3

简短的回答是这_Unwind_RaiseException不是特定于 C++ 的函数。它来自 libunwind 库,允许抛出任何类型的异常。

可以在这些博客文章中找到更多详细信息。

于 2013-07-17T09:13:01.950 回答
0

由于您不想使用现有的 C++ 异常处理基础架构,因此您需要为您的语言复制其中的一部分。

您可以在compiler-rt中使用 C unwinder 的实现(或者在libstdc++中使用更复杂的实现),然后在libstdc ++中调用unwinder 。

于 2013-02-21T16:25:14.443 回答