summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCContext.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-03-13 18:55:04 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-03-13 18:55:04 +0000
commita55ddad1340852fdd004c5d1eda0eef6668c54ef (patch)
tree6f279fab35208e76a81cbbb8caa0540300ea6b50 /llvm/lib/MC/MCContext.cpp
parentdc4bea46763b5a8b7656baa24034edc9941a0aed (diff)
downloadbcm5719-llvm-a55ddad1340852fdd004c5d1eda0eef6668c54ef.tar.gz
bcm5719-llvm-a55ddad1340852fdd004c5d1eda0eef6668c54ef.zip
MCDwarf: Simplify MCDwarfFile to just use std::string instead of cunning use of MCContext's allocator.
There aren't /that/ many files, and we are already using various maps and other standard containers that don't use MCContext's allocator to store these values, so this doesn't seem to be critical and simplifies the design (I'll be moving construction out of MCContext shortly so it'd be annoying to have to pass the allocator around to allocate these things... and we'll have non-MCContext users (debug_line.dwo) shortly) llvm-svn: 203831
Diffstat (limited to 'llvm/lib/MC/MCContext.cpp')
-rw-r--r--llvm/lib/MC/MCContext.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp
index 5ec5c35630c..3c8de997124 100644
--- a/llvm/lib/MC/MCContext.cpp
+++ b/llvm/lib/MC/MCContext.cpp
@@ -338,20 +338,19 @@ const MCSectionCOFF *MCContext::getCOFFSection(StringRef Section) {
unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName,
unsigned FileNumber, unsigned CUID) {
MCDwarfFileTable &Table = MCDwarfFileTablesCUMap[CUID];
- SmallVectorImpl<MCDwarfFile *>& MCDwarfFiles = Table.getMCDwarfFiles();
+ SmallVectorImpl<MCDwarfFile>& MCDwarfFiles = Table.getMCDwarfFiles();
SmallVectorImpl<StringRef>& MCDwarfDirs = Table.getMCDwarfDirs();
// Make space for this FileNumber in the MCDwarfFiles vector if needed.
if (FileNumber >= MCDwarfFiles.size()) {
MCDwarfFiles.resize(FileNumber + 1);
- } else {
- MCDwarfFile *&ExistingFile = MCDwarfFiles[FileNumber];
- if (ExistingFile)
- // It is an error to use see the same number more than once.
- return 0;
}
// Get the new MCDwarfFile slot for this FileNumber.
- MCDwarfFile *&File = MCDwarfFiles[FileNumber];
+ MCDwarfFile &File = MCDwarfFiles[FileNumber];
+
+ // It is an error to use see the same number more than once.
+ if (!File.Name.empty())
+ return 0;
if (Directory.empty()) {
// Separate the directory part from the basename of the FileName.
@@ -387,13 +386,8 @@ unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName,
DirIndex++;
}
- // Now make the MCDwarfFile entry and place it in the slot in the MCDwarfFiles
- // vector.
- char *Buf = static_cast<char *>(Allocate(FileName.size()));
- memcpy(Buf, FileName.data(), FileName.size());
- File = new (*this) MCDwarfFile;
- File->Name = StringRef(Buf, FileName.size());
- File->DirIndex = DirIndex;
+ File.Name = FileName;
+ File.DirIndex = DirIndex;
// return the allocated FileNumber.
return FileNumber;
@@ -402,11 +396,11 @@ unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName,
/// isValidDwarfFileNumber - takes a dwarf file number and returns true if it
/// currently is assigned and false otherwise.
bool MCContext::isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID) {
- const SmallVectorImpl<MCDwarfFile *>& MCDwarfFiles = getMCDwarfFiles(CUID);
+ const SmallVectorImpl<MCDwarfFile>& MCDwarfFiles = getMCDwarfFiles(CUID);
if(FileNumber == 0 || FileNumber >= MCDwarfFiles.size())
return false;
- return MCDwarfFiles[FileNumber] != 0;
+ return !MCDwarfFiles[FileNumber].Name.empty();
}
void MCContext::FatalError(SMLoc Loc, const Twine &Msg) {
OpenPOWER on IntegriCloud