forked from OSchip/llvm-project
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
This commit is contained in:
parent
1507dbfbfc
commit
607f67b16c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue