mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Stop leaking std::strings in GetDwarfFile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109746 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -213,7 +213,6 @@ unsigned MCContext::GetDwarfFile(StringRef FileName, unsigned FileNumber) {
|
||||
std::pair<StringRef, StringRef> Slash = FileName.rsplit('/');
|
||||
|
||||
// Find or make a entry in the MCDwarfDirs vector for this Directory.
|
||||
StringRef Directory;
|
||||
StringRef Name;
|
||||
unsigned DirIndex;
|
||||
// Capture directory name.
|
||||
@@ -221,23 +220,24 @@ unsigned MCContext::GetDwarfFile(StringRef FileName, unsigned FileNumber) {
|
||||
Name = Slash.first;
|
||||
DirIndex = 0; // For FileNames with no directories a DirIndex of 0 is used.
|
||||
} else {
|
||||
Directory = Slash.first;
|
||||
StringRef Directory = Slash.first;
|
||||
Name = Slash.second;
|
||||
for (DirIndex = 1; DirIndex < MCDwarfDirs.size(); DirIndex++) {
|
||||
std::string *&Dir = MCDwarfDirs[DirIndex];
|
||||
if (Directory == *Dir)
|
||||
if (Directory == MCDwarfDirs[DirIndex])
|
||||
break;
|
||||
}
|
||||
if (DirIndex >= MCDwarfDirs.size()) {
|
||||
MCDwarfDirs.resize(DirIndex + 1);
|
||||
std::string *&NewDir = MCDwarfDirs[DirIndex];
|
||||
NewDir = new (*this) std::string(Directory);
|
||||
char *Buf = static_cast<char *>(Allocate(Directory.size()));
|
||||
memcpy(Buf, Directory.data(), Directory.size());
|
||||
MCDwarfDirs.push_back(StringRef(Buf, Directory.size()));
|
||||
}
|
||||
}
|
||||
|
||||
// Now make the MCDwarfFile entry and place it in the slot in the MCDwarfFiles
|
||||
// vector.
|
||||
File = new (*this) MCDwarfFile(Name, DirIndex);
|
||||
char *Buf = static_cast<char *>(Allocate(Name.size()));
|
||||
memcpy(Buf, Name.data(), Name.size());
|
||||
File = new (*this) MCDwarfFile(StringRef(Buf, Name.size()), DirIndex);
|
||||
|
||||
// return the allocated FileNumber.
|
||||
return FileNumber;
|
||||
|
Reference in New Issue
Block a user