diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-10-24 00:46:51 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-10-24 00:46:51 +0000 |
commit | 607f67b16ca25c9d9afa725dd644487089702ff3 (patch) | |
tree | 06e6cc65177f596dc356607761ce94d981822a63 /clang/lib/CodeGen/CGDebugInfo.cpp | |
parent | 1507dbfbfcd0cceace4663db0b71c1252cf2cb28 (diff) | |
download | bcm5719-llvm-607f67b16ca25c9d9afa725dd644487089702ff3.tar.gz bcm5719-llvm-607f67b16ca25c9d9afa725dd644487089702ff3.zip |
Map compilation units using FileEntry pointers instead of
FileIDs. This seems better conceptually and lets the SourceManager
handle details of mapping the location to a file ID.
- In practice, fixes an assert because this code wasn't using
getPhysicalLoc.
llvm-svn: 58055
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index e1889603ee7..89d00aee5e8 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -64,7 +64,7 @@ CGDebugInfo::~CGDebugInfo() delete SR; // Free CompileUnitCache. - for (std::map<unsigned, llvm::CompileUnitDesc *>::iterator I + for (std::map<const FileEntry*, llvm::CompileUnitDesc *>::iterator I = CompileUnitCache.begin(); I != CompileUnitCache.end(); ++I) { delete I->second; } @@ -134,15 +134,17 @@ llvm::Value *CGDebugInfo::getValueFor(llvm::DebugInfoDesc *DD) { /// one if necessary. llvm::CompileUnitDesc *CGDebugInfo::getOrCreateCompileUnit(const SourceLocation Loc) { + SourceManager &SM = M->getContext().getSourceManager(); + const FileEntry *FE = SM.getFileEntryForLoc(Loc); // See if this compile unit has been used before. - llvm::CompileUnitDesc *&Slot = CompileUnitCache[Loc.getFileID()]; - if (Slot) return Slot; - + llvm::CompileUnitDesc *&Unit = CompileUnitCache[FE]; + if (Unit) return Unit; + // Create new compile unit. // FIXME: Where to free these? // One way is to iterate over the CompileUnitCache in ~CGDebugInfo. - llvm::CompileUnitDesc *Unit = new llvm::CompileUnitDesc(); + Unit = new llvm::CompileUnitDesc(); // Make sure we have an anchor. if (!CompileUnitAnchor) { @@ -150,8 +152,6 @@ llvm::CompileUnitDesc } // Get source file information. - SourceManager &SM = M->getContext().getSourceManager(); - const FileEntry *FE = SM.getFileEntryForLoc(Loc); const char *FileName, *DirName; if (FE) { FileName = FE->getName(); @@ -173,9 +173,6 @@ llvm::CompileUnitDesc // FIXME: Handle other languages as well. Unit->setLanguage(llvm::dwarf::DW_LANG_C89); - // Update cache. - Slot = Unit; - return Unit; } |