2013-05-28 54 views
2

我想生成位码文件(.BC),因为它是写在documentation如何生成LLVM位码

的hello.c

#include <stdio.h> 

int main() { 
    printf("hello world\n"); 
    return 0; 
} 

然后

% clang -O3 -emit-llvm hello.c -c -o hello.bc 

% lli hello.bc 

运行代码,但我有奇怪的输出:

lli: Attributes.cpp:367: static llvm::AttrListPtr llvm::AttrListPtr::get(llvm::LLVMContext &, ArrayRef<llvm::AttributeWithIndex>): Assertion `Attrs[i].Attrs.hasAttributes() && "Pointless attribute!"' failed. 
0 lli    0x0000000000c944ff 
1 lli    0x0000000000c94a79 
2 libpthread.so.0 0x00007fbf12a88060 
3 libc.so.6  0x00007fbf11d663e5 gsignal + 53 
4 libc.so.6  0x00007fbf11d69b4b abort + 379 
5 libc.so.6  0x00007fbf11d5ed8d __assert_fail + 221 
6 lli    0x0000000000b8b285 llvm::AttrListPtr::get(llvm::LLVMContext&, llvm::ArrayRef<llvm::AttributeWithIndex>) + 517 
7 lli    0x000000000051f14e llvm::BitcodeReader::ParseAttributeBlock() + 494 
8 lli    0x00000000005249f1 llvm::BitcodeReader::ParseModule(bool) + 497 
9 lli    0x0000000000526617 llvm::BitcodeReader::ParseBitcodeInto(llvm::Module*) + 359 
10 lli    0x000000000052eae9 llvm::getLazyBitcodeModule(llvm::MemoryBuffer*, llvm::LLVMContext&, std::string*) + 569 
11 lli    0x000000000052ee3f llvm::ParseBitcodeFile(llvm::MemoryBuffer*, llvm::LLVMContext&, std::string*) + 15 
12 lli    0x00000000004ea29a llvm::ParseIR(llvm::MemoryBuffer*, llvm::SMDiagnostic&, llvm::LLVMContext&) + 170 
13 lli    0x00000000004e7078 llvm::ParseIRFile(std::string const&, llvm::SMDiagnostic&, llvm::LLVMContext&) + 536 
14 lli    0x00000000004e3a58 main + 312 
15 libc.so.6  0x00007fbf11d5130d __libc_start_main + 237 
16 lli    0x00000000004e1f49 
Stack dump: 
0. Program arguments: lli hello.bc 
Aborted 

什么问题。为什么它不起作用?

回答

2

这可能是您的特定LLVM/Clang版本的问题。你是否已经启用了断言的源代码编译?你只需要修复一个更新的版本。 (请参阅http://llvm.org/bugs/show_bug.cgi?id=15786以获得与旧版本类似的断言失败报告。)

FWIW - 该程序对本地SVN构建(铿锵声3.4版(中继182672))正常工作。