Llvm WriteBitcodeToFile终止程序

Llvm WriteBitcodeToFile终止程序,llvm,llvm-ir,Llvm,Llvm Ir,我执行这段简单的代码,但在“WriteBitCodeTable”上发生了异常: “在抛出'std::bad_alloc'实例后调用terminate” what():std::bad_alloc“ 我不明白为什么会这样。 现在我使用LLVM3.6.1,我使用clang++3.6.1。 在LLVM3.3上,代码运行良好 调用堆栈: 0 raise/lib/x86_64-linux-gnu/libc.so.6 0 0x7ffff6da10d5 1 abort/lib/x86_64-linux-gnu

我执行这段简单的代码,但在“WriteBitCodeTable”上发生了异常: “在抛出'std::bad_alloc'实例后调用terminate” what():std::bad_alloc“
我不明白为什么会这样。 现在我使用LLVM3.6.1,我使用clang++3.6.1。 在LLVM3.3上,代码运行良好

调用堆栈:

0 raise/lib/x86_64-linux-gnu/libc.so.6 0 0x7ffff6da10d5
1 abort/lib/x86_64-linux-gnu/libc.so.6 0 0x7ffff6da483b
2\uuu gnu\u cxx::\uu verbose\u terminate\u handler()/usr/lib/x86\u 64-linux-gnu/libstdc++.so.6 0 0x7FF76CBD4D
3???/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0 0x7ffff76c9d96
4 std::terminate()/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0 0x7ffff76c9de1
5_uucxa_throw/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0 0x7FF76C9FF8 6运算符新(未签名 long)/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0 0x7ffff76ca4fc
7 std::string::_Rep::_S_create(无符号长、无符号长、, 分配器 const&)/usr/lib/x86_64-linux-gnu/libstdc++.so.60 0x7ffff7709659
8 std::string::_Rep::_M_clone(std::allocator const&,未签名 long)/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0 0x7ffff770a3fb
9标准::基本字符串,标准::分配器

::basic_string(std::string const&)/usr/lib/x86_64-linux-gnu/libstdc++.so.6 0 0x7ff770aadc
10 llvm::Twine::str()const Twine.cpp 19 0x6e43c3
11 llvm::Triple::Triple(llvm::Twine const&)Triple.cpp 449 0x6dec99
12 llvm::WriteBitCodeFile(llvm::模块常量*, llvm::raw_ostream&)BitcodeWriter.cpp 2071 0x42eee5
13 main.cpp 43 0x40da26

代码:


std::bad_alloc似乎表明内存不足。此外,llvm::parseIR返回std::unique_ptr,并且您使用的是普通模块*。请尝试使用正确的类型。
std::error_code err_code;
llvm::LLVMContext &ctx = llvm::getGlobalContext();
llvm::Module *mod;
llvm::SMDiagnostic Err;


std::string filename = InputFilename;

mod = llvm::parseIRFile(filename,Err,ctx).get();

llvm::StringRef sRefName(OutputFilename);
llvm::raw_fd_ostream raw(sRefName, err_code,  (llvm::sys::fs::OpenFlags)8);
 llvm::WriteBitcodeToFile(mod, raw); // SIGABORT