/// \brief Open the specified file as a MemoryBuffer, returning a new
/// MemoryBuffer if successful, otherwise returning null.
- llvm::MemoryBuffer *getBufferForFile(const FileEntry *Entry,
- std::string *ErrorStr = nullptr,
- bool isVolatile = false,
- bool ShouldCloseOpenFile = true);
- llvm::MemoryBuffer *getBufferForFile(StringRef Filename,
- std::string *ErrorStr = nullptr);
+ std::unique_ptr<llvm::MemoryBuffer>
+ getBufferForFile(const FileEntry *Entry, std::string *ErrorStr = nullptr,
+ bool isVolatile = false, bool ShouldCloseOpenFile = true);
+ std::unique_ptr<llvm::MemoryBuffer>
+ getBufferForFile(StringRef Filename, std::string *ErrorStr = nullptr);
/// \brief Get the 'stat' information for the given \p Path.
///
path = NewPath;
}
-llvm::MemoryBuffer *FileManager::
-getBufferForFile(const FileEntry *Entry, std::string *ErrorStr,
- bool isVolatile, bool ShouldCloseOpenFile) {
+std::unique_ptr<llvm::MemoryBuffer>
+FileManager::getBufferForFile(const FileEntry *Entry, std::string *ErrorStr,
+ bool isVolatile, bool ShouldCloseOpenFile) {
std::unique_ptr<llvm::MemoryBuffer> Result;
std::error_code ec;
// FileEntry is open or not.
if (ShouldCloseOpenFile)
Entry->closeFile();
- return Result.release();
+ return Result;
}
// Otherwise, open the file.
/*RequiresNullTerminator=*/true, isVolatile);
if (ec && ErrorStr)
*ErrorStr = ec.message();
- return Result.release();
+ return Result;
}
SmallString<128> FilePath(Entry->getName());
/*RequiresNullTerminator=*/true, isVolatile);
if (ec && ErrorStr)
*ErrorStr = ec.message();
- return Result.release();
+ return Result;
}
-llvm::MemoryBuffer *FileManager::
-getBufferForFile(StringRef Filename, std::string *ErrorStr) {
+std::unique_ptr<llvm::MemoryBuffer>
+FileManager::getBufferForFile(StringRef Filename, std::string *ErrorStr) {
std::unique_ptr<llvm::MemoryBuffer> Result;
std::error_code ec;
if (FileSystemOpts.WorkingDir.empty()) {
ec = FS->getBufferForFile(Filename, Result);
if (ec && ErrorStr)
*ErrorStr = ec.message();
- return Result.release();
+ return Result;
}
SmallString<128> FilePath(Filename);
ec = FS->getBufferForFile(FilePath.c_str(), Result);
if (ec && ErrorStr)
*ErrorStr = ec.message();
- return Result.release();
+ return Result;
}
/// getStatValue - Get the 'stat' information for the specified path,
std::string ErrorStr;
bool isVolatile = SM.userFilesAreVolatile() && !IsSystemFile;
- Buffer.setPointer(SM.getFileManager().getBufferForFile(ContentsEntry,
- &ErrorStr,
- isVolatile));
+ Buffer.setPointer(SM.getFileManager()
+ .getBufferForFile(ContentsEntry, &ErrorStr, isVolatile)
+ .release());
// If we were unable to open the file, then we are in an inconsistent
// situation where the content cache referenced a file which no longer
if (!LinkModuleToUse && !LinkBCFile.empty()) {
std::string ErrorStr;
- llvm::MemoryBuffer *BCBuf =
+ std::unique_ptr<llvm::MemoryBuffer> BCBuf =
CI.getFileManager().getBufferForFile(LinkBCFile, &ErrorStr);
if (!BCBuf) {
CI.getDiagnostics().Report(diag::err_cannot_open_file)
}
ErrorOr<llvm::Module *> ModuleOrErr =
- getLazyBitcodeModule(BCBuf, *VMContext);
+ getLazyBitcodeModule(BCBuf.get(), *VMContext);
if (std::error_code EC = ModuleOrErr.getError()) {
CI.getDiagnostics().Report(diag::err_cannot_open_file)
<< LinkBCFile << EC.message();
return nullptr;
}
+ BCBuf.release(); // Owned by the module now.
LinkModuleToUse = ModuleOrErr.get();
}
llvm::MemoryBuffer *ASTUnit::getBufferForFile(StringRef Filename,
std::string *ErrorStr) {
assert(FileMgr);
- return FileMgr->getBufferForFile(Filename, ErrorStr);
+ return FileMgr->getBufferForFile(Filename, ErrorStr).release();
}
/// \brief Configure the diagnostics object for use with ASTUnit.
// STDIN.
if (File->isNamedPipe()) {
std::string ErrorStr;
- if (llvm::MemoryBuffer *MB =
+ if (std::unique_ptr<llvm::MemoryBuffer> MB =
FileMgr.getBufferForFile(File, &ErrorStr, /*isVolatile=*/true)) {
// Create a new virtual file that will have the correct size.
File = FileMgr.getVirtualFile(InputFile, MB->getBufferSize(), 0);
- SourceMgr.overrideFileContents(File, MB);
+ SourceMgr.overrideFileContents(File, MB.release());
} else {
Diags.Report(diag::err_cannot_open_file) << InputFile << ErrorStr;
return false;
// We can't do anything with these.
return;
}
-
+
CompilerInstance &CI = getCompilerInstance();
- llvm::MemoryBuffer *Buffer
+ std::unique_ptr<llvm::MemoryBuffer> Buffer
= CI.getFileManager().getBufferForFile(getCurrentFile());
if (Buffer) {
unsigned Preamble =
Lexer::ComputePreamble(Buffer->getBuffer(), CI.getLangOpts()).first;
llvm::outs().write(Buffer->getBufferStart(), Preamble);
- delete Buffer;
}
}
DiagnosticsEngine &Diags) {
// Open the AST file.
std::string ErrStr;
- std::unique_ptr<llvm::MemoryBuffer> Buffer;
- Buffer.reset(FileMgr.getBufferForFile(ASTFileName, &ErrStr));
+ std::unique_ptr<llvm::MemoryBuffer> Buffer =
+ FileMgr.getBufferForFile(ASTFileName, &ErrStr);
if (!Buffer) {
Diags.Report(diag::err_fe_unable_to_read_pch_file) << ASTFileName << ErrStr;
return std::string();
ASTReaderListener &Listener) {
// Open the AST file.
std::string ErrStr;
- std::unique_ptr<llvm::MemoryBuffer> Buffer;
- Buffer.reset(FileMgr.getBufferForFile(Filename, &ErrStr));
+ std::unique_ptr<llvm::MemoryBuffer> Buffer =
+ FileMgr.getBufferForFile(Filename, &ErrStr);
if (!Buffer) {
return true;
}
bool GlobalModuleIndexBuilder::loadModuleFile(const FileEntry *File) {
// Open the module file.
- std::unique_ptr<llvm::MemoryBuffer> Buffer;
+
std::string ErrorStr;
- Buffer.reset(FileMgr.getBufferForFile(File, &ErrorStr, /*isVolatile=*/true));
+ std::unique_ptr<llvm::MemoryBuffer> Buffer =
+ FileMgr.getBufferForFile(File, &ErrorStr, /*isVolatile=*/true);
if (!Buffer) {
return true;
}
// ModuleManager it must be the same underlying file.
// FIXME: Because FileManager::getFile() doesn't guarantee that it will
// give us an open file, this may not be 100% reliable.
- New->Buffer.reset(FileMgr.getBufferForFile(New->File, &ErrorStr,
- /*IsVolatile*/false,
- /*ShouldClose*/false));
+ New->Buffer = FileMgr.getBufferForFile(New->File, &ErrorStr,
+ /*IsVolatile*/ false,
+ /*ShouldClose*/ false);
}
if (!New->Buffer)
FileSystemOptions FO;
FileManager FileMgr(FO);
- std::unique_ptr<llvm::MemoryBuffer> Buffer;
- Buffer.reset(FileMgr.getBufferForFile(file));
-
+ std::unique_ptr<llvm::MemoryBuffer> Buffer = FileMgr.getBufferForFile(file);
if (!Buffer) {
reportBad(CXLoadDiag_CannotLoad, ErrStr);
return nullptr;