]> granicus.if.org Git - clang/commitdiff
Map compilation units using FileEntry pointers instead of
authorDaniel Dunbar <daniel@zuster.org>
Fri, 24 Oct 2008 00:46:51 +0000 (00:46 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 24 Oct 2008 00:46:51 +0000 (00:46 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58055 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDebugInfo.cpp
lib/CodeGen/CGDebugInfo.h

index e1889603ee76bf3f58473dd9cd3ee63a304d235c..89d00aee5e8738734fef4c653cb02bfd46055015 100644 (file)
@@ -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;
 }
 
index 9352505a96d50b4be9aa80dd26c82907467fd739..07d5b54b3d9a8cd531f6c43cc8a0318c42e48511 100644 (file)
@@ -57,7 +57,7 @@ private:
   typedef llvm::IRBuilder<> BuilderType;
 
   /// CompileUnitCache - Cache of previously constructed CompileUnits.
-  std::map<unsigned, llvm::CompileUnitDesc *> CompileUnitCache;
+  std::map<const FileEntry*, llvm::CompileUnitDesc *> CompileUnitCache;
 
   /// TypeCache - Cache of previously constructed Types.
   std::map<void *, llvm::TypeDesc *> TypeCache;