Revert a C API difference that I incorrectly introduced.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 18 Jun 2014 20:07:35 +0000 (20:07 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 18 Jun 2014 20:07:35 +0000 (20:07 +0000)
LLVMGetBitcodeModuleInContext should not take ownership on error. I will
try to localize this odd api requirement, but this should get the bots green.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211213 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Reader/BitcodeReader.h

index 04fc18ec21f06d039148aafb0dc5c07a78a83823..9c398277d42db86a31bf284859cf16bde7d03b0e 100644 (file)
@@ -3380,6 +3380,7 @@ ErrorOr<Module *> llvm::getLazyBitcodeModule(MemoryBuffer *Buffer,
   BitcodeReader *R = new BitcodeReader(Buffer, Context, BufferOwned);
   M->setMaterializer(R);
   if (std::error_code EC = R->ParseBitcodeInto(M)) {
+    R->releaseBuffer(); // Never take ownership on error.
     delete M;  // Also deletes R.
     return EC;
   }
index 51a8c6a111307d791cbe89e96f6d0474bb130c2f..6aa3e0e5adf775be36cbc7c27e9047f72bed428d 100644 (file)
@@ -239,6 +239,10 @@ public:
 
   void FreeState();
 
+  void releaseBuffer() {
+    Buffer = nullptr;
+  }
+
   bool isMaterializable(const GlobalValue *GV) const override;
   bool isDematerializable(const GlobalValue *GV) const override;
   std::error_code Materialize(GlobalValue *GV) override;