调用getlazybitcodemodule时出现段错误

时间:2015-02-11 02:05:50

标签: c++ llvm

尝试调用函数getLazyBitcodeModule时出现段错误。 导致故障的代码如下所示:

 // Load the bytecode...
  std::string ErrorMsg;
  Module *mainModule = 0;
  OwningPtr<MemoryBuffer> BufferPtr;     
  error_code ec = MemoryBuffer::getFileOrSTDIN(InputFile, BufferPtr);
  if (ec) {
      printf("error loading program '%s': %s\n", InputFile, ec.message().c_str());
      exit(1);
  }

  mainModule = getLazyBitcodeModule(BufferPtr.get(), getGlobalContext(), &ErrorMsg);

gdb调试信息也显示如下:

(gdb) backtrace
#0  0x0000000000000241 in ?? ()
#1  0x000000000040630e in ~OwningPtr (this=0x7fffffffdd20, __in_chrg=    <optimized out>) at /usr/local/include/llvm/ADT/OwningPtr.h:45
#2  readBitFile (InputFile=InputFile@entry=0xafec23 "test.bc") at    main.cpp:36
#3  0x0000000000405fce in main (argc=2, argv=0x7fffffffde78) at main.cpp:71

有任何解决错误的建议吗?

1 个答案:

答案 0 :(得分:0)

如果你查看getLazyBitcodeModule()的实现,你会看到这一行:

R->setBufferOwned(true);

BitcodeReader现在拥有你的缓冲区,并在你被破坏时为你删除缓冲区。你的OwningPtr也释放了相同的内存,因此双重释放导致了段错误。