mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
Explicitly pass ownership of the MemoryBuffer to AddNewSourceBuffer using std::unique_ptr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216223 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fdbf61d00d
commit
95ca0fb247
@ -19,11 +19,11 @@
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/SMLoc.h"
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
class MemoryBuffer;
|
||||
class SourceMgr;
|
||||
class SMDiagnostic;
|
||||
class SMFixIt;
|
||||
@ -47,7 +47,7 @@ public:
|
||||
private:
|
||||
struct SrcBuffer {
|
||||
/// The memory buffer for the file.
|
||||
MemoryBuffer *Buffer;
|
||||
std::unique_ptr<MemoryBuffer> Buffer;
|
||||
|
||||
/// This is the location of the parent include, or null if at the top level.
|
||||
SMLoc IncludeLoc;
|
||||
@ -96,7 +96,7 @@ public:
|
||||
|
||||
const MemoryBuffer *getMemoryBuffer(unsigned i) const {
|
||||
assert(isValidBufferID(i));
|
||||
return Buffers[i - 1].Buffer;
|
||||
return Buffers[i - 1].Buffer.get();
|
||||
}
|
||||
|
||||
unsigned getNumBuffers() const {
|
||||
@ -115,11 +115,12 @@ public:
|
||||
|
||||
/// Add a new source buffer to this source manager. This takes ownership of
|
||||
/// the memory buffer.
|
||||
unsigned AddNewSourceBuffer(MemoryBuffer *F, SMLoc IncludeLoc) {
|
||||
unsigned AddNewSourceBuffer(std::unique_ptr<MemoryBuffer> F,
|
||||
SMLoc IncludeLoc) {
|
||||
SrcBuffer NB;
|
||||
NB.Buffer = F;
|
||||
NB.Buffer = std::move(F);
|
||||
NB.IncludeLoc = IncludeLoc;
|
||||
Buffers.push_back(NB);
|
||||
Buffers.push_back(std::move(NB));
|
||||
return Buffers.size();
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ bool llvm::parseAssemblyInto(std::unique_ptr<MemoryBuffer> F, Module &M,
|
||||
SMDiagnostic &Err) {
|
||||
SourceMgr SM;
|
||||
StringRef Buf = F->getBuffer();
|
||||
SM.AddNewSourceBuffer(F.release(), SMLoc());
|
||||
SM.AddNewSourceBuffer(std::move(F), SMLoc());
|
||||
|
||||
return LLParser(Buf, SM, Err, &M).Run();
|
||||
}
|
||||
|
@ -110,14 +110,12 @@ void AsmPrinter::EmitInlineAsm(StringRef Str, const MDNode *LocMDNode,
|
||||
HasDiagHandler = true;
|
||||
}
|
||||
|
||||
MemoryBuffer *Buffer;
|
||||
if (isNullTerminated)
|
||||
Buffer = MemoryBuffer::getMemBuffer(Str, "<inline asm>");
|
||||
else
|
||||
Buffer = MemoryBuffer::getMemBufferCopy(Str, "<inline asm>");
|
||||
std::unique_ptr<MemoryBuffer> Buffer(
|
||||
isNullTerminated ? MemoryBuffer::getMemBuffer(Str, "<inline asm>")
|
||||
: MemoryBuffer::getMemBufferCopy(Str, "<inline asm>"));
|
||||
|
||||
// Tell SrcMgr about this buffer, it takes ownership of the buffer.
|
||||
SrcMgr.AddNewSourceBuffer(Buffer, SMLoc());
|
||||
SrcMgr.AddNewSourceBuffer(std::move(Buffer), SMLoc());
|
||||
|
||||
std::unique_ptr<MCAsmParser> Parser(
|
||||
createMCAsmParser(SrcMgr, OutContext, OutStreamer, *MAI));
|
||||
|
@ -2123,8 +2123,8 @@ bool AsmParser::handleMacroEntry(const MCAsmMacro *M, SMLoc NameLoc) {
|
||||
// instantiation.
|
||||
OS << ".endmacro\n";
|
||||
|
||||
MemoryBuffer *Instantiation =
|
||||
MemoryBuffer::getMemBufferCopy(OS.str(), "<instantiation>");
|
||||
std::unique_ptr<MemoryBuffer> Instantiation(
|
||||
MemoryBuffer::getMemBufferCopy(OS.str(), "<instantiation>"));
|
||||
|
||||
// Create the macro instantiation object and add to the current macro
|
||||
// instantiation stack.
|
||||
@ -2134,7 +2134,7 @@ bool AsmParser::handleMacroEntry(const MCAsmMacro *M, SMLoc NameLoc) {
|
||||
ActiveMacros.push_back(MI);
|
||||
|
||||
// Jump to the macro instantiation and prime the lexer.
|
||||
CurBuffer = SrcMgr.AddNewSourceBuffer(Instantiation, SMLoc());
|
||||
CurBuffer = SrcMgr.AddNewSourceBuffer(std::move(Instantiation), SMLoc());
|
||||
Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer)->getBuffer());
|
||||
Lex();
|
||||
|
||||
@ -4310,8 +4310,8 @@ void AsmParser::instantiateMacroLikeBody(MCAsmMacro *M, SMLoc DirectiveLoc,
|
||||
raw_svector_ostream &OS) {
|
||||
OS << ".endr\n";
|
||||
|
||||
MemoryBuffer *Instantiation =
|
||||
MemoryBuffer::getMemBufferCopy(OS.str(), "<instantiation>");
|
||||
std::unique_ptr<MemoryBuffer> Instantiation(
|
||||
MemoryBuffer::getMemBufferCopy(OS.str(), "<instantiation>"));
|
||||
|
||||
// Create the macro instantiation object and add to the current macro
|
||||
// instantiation stack.
|
||||
@ -4321,7 +4321,7 @@ void AsmParser::instantiateMacroLikeBody(MCAsmMacro *M, SMLoc DirectiveLoc,
|
||||
ActiveMacros.push_back(MI);
|
||||
|
||||
// Jump to the macro instantiation and prime the lexer.
|
||||
CurBuffer = SrcMgr.AddNewSourceBuffer(Instantiation, SMLoc());
|
||||
CurBuffer = SrcMgr.AddNewSourceBuffer(std::move(Instantiation), SMLoc());
|
||||
Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer)->getBuffer());
|
||||
Lex();
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ IRObjectFile::IRObjectFile(MemoryBufferRef Object, std::unique_ptr<Module> Mod)
|
||||
|
||||
std::unique_ptr<MemoryBuffer> Buffer(MemoryBuffer::getMemBuffer(InlineAsm));
|
||||
SourceMgr SrcMgr;
|
||||
SrcMgr.AddNewSourceBuffer(Buffer.release(), SMLoc());
|
||||
SrcMgr.AddNewSourceBuffer(std::move(Buffer), SMLoc());
|
||||
std::unique_ptr<MCAsmParser> Parser(
|
||||
createMCAsmParser(SrcMgr, MCCtx, *Streamer, *MAI));
|
||||
|
||||
|
@ -42,11 +42,6 @@ SourceMgr::~SourceMgr() {
|
||||
// Delete the line # cache if allocated.
|
||||
if (LineNoCacheTy *Cache = getCache(LineNoCache))
|
||||
delete Cache;
|
||||
|
||||
while (!Buffers.empty()) {
|
||||
delete Buffers.back().Buffer;
|
||||
Buffers.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
unsigned SourceMgr::AddIncludeFile(const std::string &Filename,
|
||||
@ -67,7 +62,7 @@ unsigned SourceMgr::AddIncludeFile(const std::string &Filename,
|
||||
if (!NewBufOrErr)
|
||||
return 0;
|
||||
|
||||
return AddNewSourceBuffer(NewBufOrErr.get().release(), IncludeLoc);
|
||||
return AddNewSourceBuffer(std::move(*NewBufOrErr), IncludeLoc);
|
||||
}
|
||||
|
||||
unsigned SourceMgr::FindBufferContainingLoc(SMLoc Loc) const {
|
||||
|
@ -708,8 +708,10 @@ Scanner::Scanner(StringRef Input, SourceMgr &sm)
|
||||
, IsStartOfStream(true)
|
||||
, IsSimpleKeyAllowed(true)
|
||||
, Failed(false) {
|
||||
InputBuffer = MemoryBuffer::getMemBuffer(Input, "YAML");
|
||||
SM.AddNewSourceBuffer(InputBuffer, SMLoc());
|
||||
std::unique_ptr<MemoryBuffer> InputBufferOwner(
|
||||
MemoryBuffer::getMemBuffer(Input, "YAML"));
|
||||
InputBuffer = InputBufferOwner.get();
|
||||
SM.AddNewSourceBuffer(std::move(InputBufferOwner), SMLoc());
|
||||
Current = InputBuffer->getBufferStart();
|
||||
End = InputBuffer->getBufferEnd();
|
||||
}
|
||||
@ -719,7 +721,7 @@ Scanner::Scanner(std::unique_ptr<MemoryBuffer> Buffer, SourceMgr &SM_)
|
||||
Current(InputBuffer->getBufferStart()), End(InputBuffer->getBufferEnd()),
|
||||
Indent(-1), Column(0), Line(0), FlowLevel(0), IsStartOfStream(true),
|
||||
IsSimpleKeyAllowed(true), Failed(false) {
|
||||
SM.AddNewSourceBuffer(Buffer.release(), SMLoc());
|
||||
SM.AddNewSourceBuffer(std::move(Buffer), SMLoc());
|
||||
}
|
||||
|
||||
Token &Scanner::peekNext() {
|
||||
|
@ -88,10 +88,9 @@ int TableGenMain(char *argv0, TableGenMainFn *MainFn) {
|
||||
<< "': " << EC.message() << "\n";
|
||||
return 1;
|
||||
}
|
||||
MemoryBuffer *F = FileOrErr.get().release();
|
||||
|
||||
// Tell SrcMgr about this buffer, which is what TGParser will pick up.
|
||||
SrcMgr.AddNewSourceBuffer(F, SMLoc());
|
||||
SrcMgr.AddNewSourceBuffer(std::move(*FileOrErr), SMLoc());
|
||||
|
||||
// Record the location of the include directory so that the lexer can find
|
||||
// it later.
|
||||
|
@ -373,12 +373,12 @@ int main(int argc, char **argv) {
|
||||
errs() << ProgName << ": " << EC.message() << '\n';
|
||||
return 1;
|
||||
}
|
||||
MemoryBuffer *Buffer = BufferPtr->release();
|
||||
MemoryBuffer *Buffer = BufferPtr->get();
|
||||
|
||||
SourceMgr SrcMgr;
|
||||
|
||||
// Tell SrcMgr about this buffer, which is what the parser will pick up.
|
||||
SrcMgr.AddNewSourceBuffer(Buffer, SMLoc());
|
||||
SrcMgr.AddNewSourceBuffer(std::move(*BufferPtr), SMLoc());
|
||||
|
||||
// Record the location of the include directories so that the lexer can find
|
||||
// it later.
|
||||
|
@ -141,14 +141,15 @@ static void parseMCMarkup(StringRef Filename) {
|
||||
errs() << ToolName << ": " << EC.message() << '\n';
|
||||
return;
|
||||
}
|
||||
MemoryBuffer *Buffer = BufferPtr->release();
|
||||
std::unique_ptr<MemoryBuffer> &Buffer = BufferPtr.get();
|
||||
|
||||
SourceMgr SrcMgr;
|
||||
|
||||
// Tell SrcMgr about this buffer, which is what the parser will pick up.
|
||||
SrcMgr.AddNewSourceBuffer(Buffer, SMLoc());
|
||||
|
||||
StringRef InputSource = Buffer->getBuffer();
|
||||
|
||||
// Tell SrcMgr about this buffer, which is what the parser will pick up.
|
||||
SrcMgr.AddNewSourceBuffer(std::move(Buffer), SMLoc());
|
||||
|
||||
MarkupLexer Lex(InputSource);
|
||||
MarkupParser Parser(Lex, SrcMgr);
|
||||
|
||||
|
@ -23,8 +23,9 @@ public:
|
||||
std::string Output;
|
||||
|
||||
void setMainBuffer(StringRef Text, StringRef BufferName) {
|
||||
MemoryBuffer *MainBuffer = MemoryBuffer::getMemBuffer(Text, BufferName);
|
||||
MainBufferID = SM.AddNewSourceBuffer(MainBuffer, llvm::SMLoc());
|
||||
std::unique_ptr<MemoryBuffer> MainBuffer(
|
||||
MemoryBuffer::getMemBuffer(Text, BufferName));
|
||||
MainBufferID = SM.AddNewSourceBuffer(std::move(MainBuffer), llvm::SMLoc());
|
||||
}
|
||||
|
||||
SMLoc getLoc(unsigned Offset) {
|
||||
|
@ -636,8 +636,9 @@ struct CheckString {
|
||||
///
|
||||
/// \param PreserveHorizontal Don't squash consecutive horizontal whitespace
|
||||
/// characters to a single space.
|
||||
static MemoryBuffer *CanonicalizeInputFile(std::unique_ptr<MemoryBuffer> MB,
|
||||
bool PreserveHorizontal) {
|
||||
static std::unique_ptr<MemoryBuffer>
|
||||
CanonicalizeInputFile(std::unique_ptr<MemoryBuffer> MB,
|
||||
bool PreserveHorizontal) {
|
||||
SmallString<128> NewFile;
|
||||
NewFile.reserve(MB->getBufferSize());
|
||||
|
||||
@ -662,8 +663,8 @@ static MemoryBuffer *CanonicalizeInputFile(std::unique_ptr<MemoryBuffer> MB,
|
||||
++Ptr;
|
||||
}
|
||||
|
||||
return MemoryBuffer::getMemBufferCopy(NewFile.str(),
|
||||
MB->getBufferIdentifier());
|
||||
return std::unique_ptr<MemoryBuffer>(
|
||||
MemoryBuffer::getMemBufferCopy(NewFile.str(), MB->getBufferIdentifier()));
|
||||
}
|
||||
|
||||
static bool IsPartOfWord(char c) {
|
||||
@ -838,25 +839,25 @@ static bool ReadCheckFile(SourceMgr &SM,
|
||||
|
||||
// If we want to canonicalize whitespace, strip excess whitespace from the
|
||||
// buffer containing the CHECK lines. Remove DOS style line endings.
|
||||
MemoryBuffer *F = CanonicalizeInputFile(std::move(FileOrErr.get()),
|
||||
NoCanonicalizeWhiteSpace);
|
||||
|
||||
SM.AddNewSourceBuffer(F, SMLoc());
|
||||
std::unique_ptr<MemoryBuffer> F =
|
||||
CanonicalizeInputFile(std::move(*FileOrErr), NoCanonicalizeWhiteSpace);
|
||||
|
||||
// Find all instances of CheckPrefix followed by : in the file.
|
||||
StringRef Buffer = F->getBuffer();
|
||||
|
||||
SM.AddNewSourceBuffer(std::move(F), SMLoc());
|
||||
|
||||
std::vector<Pattern> ImplicitNegativeChecks;
|
||||
for (const auto &PatternString : ImplicitCheckNot) {
|
||||
// Create a buffer with fake command line content in order to display the
|
||||
// command line option responsible for the specific implicit CHECK-NOT.
|
||||
std::string Prefix = std::string("-") + ImplicitCheckNot.ArgStr + "='";
|
||||
std::string Suffix = "'";
|
||||
MemoryBuffer *CmdLine = MemoryBuffer::getMemBufferCopy(
|
||||
Prefix + PatternString + Suffix, "command line");
|
||||
std::unique_ptr<MemoryBuffer> CmdLine(MemoryBuffer::getMemBufferCopy(
|
||||
Prefix + PatternString + Suffix, "command line"));
|
||||
StringRef PatternInBuffer =
|
||||
CmdLine->getBuffer().substr(Prefix.size(), PatternString.size());
|
||||
SM.AddNewSourceBuffer(CmdLine, SMLoc());
|
||||
SM.AddNewSourceBuffer(std::move(CmdLine), SMLoc());
|
||||
|
||||
ImplicitNegativeChecks.push_back(Pattern(Check::CheckNot));
|
||||
ImplicitNegativeChecks.back().ParsePattern(PatternInBuffer,
|
||||
@ -1272,18 +1273,18 @@ int main(int argc, char **argv) {
|
||||
|
||||
// Remove duplicate spaces in the input file if requested.
|
||||
// Remove DOS style line endings.
|
||||
MemoryBuffer *F =
|
||||
CanonicalizeInputFile(std::move(File), NoCanonicalizeWhiteSpace);
|
||||
|
||||
SM.AddNewSourceBuffer(F, SMLoc());
|
||||
|
||||
/// VariableTable - This holds all the current filecheck variables.
|
||||
StringMap<StringRef> VariableTable;
|
||||
std::unique_ptr<MemoryBuffer> F =
|
||||
CanonicalizeInputFile(std::move(File), NoCanonicalizeWhiteSpace);
|
||||
|
||||
// Check that we have all of the expected strings, in order, in the input
|
||||
// file.
|
||||
StringRef Buffer = F->getBuffer();
|
||||
|
||||
SM.AddNewSourceBuffer(std::move(F), SMLoc());
|
||||
|
||||
/// VariableTable - This holds all the current filecheck variables.
|
||||
StringMap<StringRef> VariableTable;
|
||||
|
||||
bool hasError = false;
|
||||
|
||||
unsigned i = 0, j = 0, e = CheckStrings.size();
|
||||
|
Loading…
x
Reference in New Issue
Block a user