c++ - llvm 解释器可以处理 c++ 异常吗?

标签 c++ exception-handling llvm interpreter

我的源码是这样的:

测试.cpp:

void func(){
   throw "abc";
}

int main(){
try{
   func();
}

catch(...){
}
}
  1. 我用clang编译了代码

    clang -S -emit-llvm test.cpp
    
  2. 然后用 lli 执行它:

    lli -force-interpreter test.ll
    

然后崩溃了:

terminating with uncaught exception of type char const*

我正在使用 macbook(llvm3.6)。

最佳答案

答案是肯定的。

  • clang++而不是clang编译C++代码
  • 删除选项-force-interpreter
  • 添加选项-jit-enable-eh

我对你的测试做了一些修改:

#include <stdio.h>
void func(){
       throw "test";
}

int main(){
    try{
           func();
    }

    catch(...){
        printf("Gotcha\n");
    }
}

结果:

$clang++ -S -emit-llvm test.cpp
$lli -jit-enable-eh test.ll
Gotcha

关于c++ - llvm 解释器可以处理 c++ 异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32111668/

相关文章:

c++ - STL函数来测试一个值是否在某个范围内?

c++ - 如何在 C++ 中返回一个列表

.net - 为什么 AppDomain 异常总是会终止应用程序?

c++ - 命名空间 + 重载 std::ostream << 运算符

c++ - 是否可以制作一个用分号替换换行符的宏

exception-handling - 当从另一个异常展开堆栈时抛出异常会发生什么?

.net - 位置 0 处没有行

objective-c - 忽略单个文件中的 "Unused Entity Issue: Unused Variable"

c++ - "uses of target_link_libraries must be either all-keyword or all-plain"

llvm - 如何获取 LLVM IR 指令的文本表示?