diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2010-07-29 13:53:19 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2010-07-29 13:53:19 +0000 |
commit | 3bce5adb32fbbe5c5549b902f4d65737f40c1499 (patch) | |
tree | fb5ef5e2fb4669b6c0c753581ba1f461251cdd42 /lib/MC/MCContext.cpp | |
parent | 808ecfce6a312625bee5c0f4f9831a0d0ed01b16 (diff) | |
download | llvm-3bce5adb32fbbe5c5549b902f4d65737f40c1499.tar.gz llvm-3bce5adb32fbbe5c5549b902f4d65737f40c1499.tar.bz2 llvm-3bce5adb32fbbe5c5549b902f4d65737f40c1499.tar.xz |
Stop leaking std::strings in GetDwarfFile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109746 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCContext.cpp')
-rw-r--r-- | lib/MC/MCContext.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 7470e8d003..5812622bb0 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -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; |