Index: COFF/DriverUtils.cpp =================================================================== --- COFF/DriverUtils.cpp +++ COFF/DriverUtils.cpp @@ -313,6 +313,27 @@ std::string Path; }; + +class TemporaryFileMemoryBuffer : public MemoryBuffer { + TemporaryFile File; + std::unique_ptr Buffer; +public: + TemporaryFileMemoryBuffer(TemporaryFile&& file) + : MemoryBuffer() , File(std::move(file)) , Buffer(File.getMemoryBuffer()) { + init(Buffer->getBufferStart(), Buffer->getBufferEnd(), false); + } + /// Return an identifier for this buffer, typically the filename it was read + /// from. + virtual StringRef getBufferIdentifier() const override { + return Buffer->getBufferIdentifier(); + } + + /// Return information on the memory mechanism used to support the + /// MemoryBuffer. + virtual BufferKind getBufferKind() const override { + return Buffer->getBufferKind(); + } +}; } // Create the default manifest file as a temporary file. @@ -413,7 +434,7 @@ E.add("/nologo"); E.add(RCFile.Path); E.run(); - return ResFile.getMemoryBuffer(); + return llvm::make_unique(std::move(ResFile)); } void createSideBySideManifest() {