Spell out the template args for compilers having issues with the injected class
[oota-llvm.git] / include / llvm / Bitcode / ReaderWriter.h
index ebb30ec01f30e3b34a6a81325ddff84e759b4662..2e8cdc737ed0bd72183a768c02138207a27a201c 100644 (file)
 #define LLVM_BITCODE_READERWRITER_H
 
 #include "llvm/Support/ErrorOr.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <memory>
 #include <string>
 
 namespace llvm {
   class BitstreamWriter;
-  class MemoryBuffer;
   class DataStreamer;
   class LLVMContext;
   class Module;
@@ -27,9 +28,9 @@ namespace llvm {
   class raw_ostream;
 
   /// Read the header of the specified bitcode buffer and prepare for lazy
-  /// deserialization of function bodies.  If successful, this takes ownership
-  /// of 'buffer. On error, this *does not* take ownership of Buffer.
-  ErrorOr<Module *> getLazyBitcodeModule(MemoryBuffer *Buffer,
+  /// deserialization of function bodies.  If successful, this moves Buffer. On
+  /// error, this *does not* move Buffer.
+  ErrorOr<Module *> getLazyBitcodeModule(std::unique_ptr<MemoryBuffer> &&Buffer,
                                          LLVMContext &Context);
 
   /// getStreamedBitcodeModule - Read the header of the specified stream
@@ -42,14 +43,13 @@ namespace llvm {
                                    std::string *ErrMsg = nullptr);
 
   /// Read the header of the specified bitcode buffer and extract just the
-  /// triple information. If successful, this returns a string and *does not*
-  /// take ownership of 'buffer'. On error, this returns "".
-  std::string getBitcodeTargetTriple(MemoryBuffer *Buffer,
+  /// triple information. If successful, this returns a string. On error, this
+  /// returns "".
+  std::string getBitcodeTargetTriple(MemoryBufferRef Buffer,
                                      LLVMContext &Context);
 
   /// Read the specified bitcode file, returning the module.
-  /// This method *never* takes ownership of Buffer.
-  ErrorOr<Module *> parseBitcodeFile(MemoryBuffer *Buffer,
+  ErrorOr<Module *> parseBitcodeFile(MemoryBufferRef Buffer,
                                      LLVMContext &Context);
 
   /// WriteBitcodeToFile - Write the specified module to the specified
@@ -142,7 +142,6 @@ namespace llvm {
 
   const std::error_category &BitcodeErrorCategory();
   enum class BitcodeError {
-    BitcodeStreamInvalidSize,
     ConflictingMETADATA_KINDRecords,
     CouldNotFindFunctionInStream,
     ExpectedConstant,
@@ -161,6 +160,7 @@ namespace llvm {
     InvalidMultipleBlocks, // We found multiple blocks of a kind that should
                            // have only one
     NeverResolvedValueFoundInFunction,
+    NeverResolvedFunctionFromBlockAddress,
     InvalidValue // Invalid version, inst number, attr number, etc
   };
   inline std::error_code make_error_code(BitcodeError E) {