我已阅读此博客文章、此文档页面和此示例,但我仍然不明白如何使用 LLVM 的 IRBuilder 为非 C++ 面向语言抛出基本异常。
据我了解,我必须:
- 创建一个
llvm::Value
包含抛出的值。 - 调用"a function",将抛出的值传递给它。此函数不会返回。
该示例使用系统倒带函数 ( _Unwind_RaiseException
) 来引发 C++ 异常,我真的不明白如何使用我自己的引发函数(因为我只需要引发对象指针)。我错过了什么?
简短的回答是这_Unwind_RaiseException
不是特定于 C++ 的函数。它来自 libunwind 库,允许抛出任何类型的异常。
可以在这些博客文章中找到更多详细信息。
由于您不想使用现有的 C++ 异常处理基础架构,因此您需要为您的语言复制其中的一部分。
您可以在compiler-rt中使用 C unwinder 的实现(或者在libstdc++中使用更复杂的实现),然后在libstdc ++中调用unwinder 。