forked from OSchip/llvm-project
Avoid leaking CompileUnits in DwarfDebug.cpp.
llvm-svn: 98268
This commit is contained in:
parent
44e51ea41f
commit
0708de1f97
|
@ -52,9 +52,9 @@ class CompileUnit {
|
||||||
|
|
||||||
/// Die - Compile unit debug information entry.
|
/// Die - Compile unit debug information entry.
|
||||||
///
|
///
|
||||||
DIE *CUDie;
|
OwningPtr<DIE> CUDie;
|
||||||
|
|
||||||
/// IndexTyDie - An anonymous type for index type.
|
/// IndexTyDie - An anonymous type for index type. Owned by CUDie.
|
||||||
DIE *IndexTyDie;
|
DIE *IndexTyDie;
|
||||||
|
|
||||||
/// GVToDieMap - Tracks the mapping of unit level debug informaton
|
/// GVToDieMap - Tracks the mapping of unit level debug informaton
|
||||||
|
@ -78,11 +78,10 @@ class CompileUnit {
|
||||||
public:
|
public:
|
||||||
CompileUnit(unsigned I, DIE *D)
|
CompileUnit(unsigned I, DIE *D)
|
||||||
: ID(I), CUDie(D), IndexTyDie(0) {}
|
: ID(I), CUDie(D), IndexTyDie(0) {}
|
||||||
~CompileUnit() { delete CUDie; delete IndexTyDie; }
|
|
||||||
|
|
||||||
// Accessors.
|
// Accessors.
|
||||||
unsigned getID() const { return ID; }
|
unsigned getID() const { return ID; }
|
||||||
DIE* getCUDie() const { return CUDie; }
|
DIE* getCUDie() const { return CUDie.get(); }
|
||||||
const StringMap<DIE*> &getGlobals() const { return Globals; }
|
const StringMap<DIE*> &getGlobals() const { return Globals; }
|
||||||
const StringMap<DIE*> &getGlobalTypes() const { return GlobalTypes; }
|
const StringMap<DIE*> &getGlobalTypes() const { return GlobalTypes; }
|
||||||
|
|
||||||
|
@ -1622,8 +1621,12 @@ DIE *DwarfDebug::getOrCreateNameSpace(DINameSpace NS) {
|
||||||
return NDie;
|
return NDie;
|
||||||
}
|
}
|
||||||
|
|
||||||
CompileUnit *DwarfDebug::constructCompileUnit(MDNode *N) {
|
void DwarfDebug::constructCompileUnit(MDNode *N) {
|
||||||
DICompileUnit DIUnit(N);
|
DICompileUnit DIUnit(N);
|
||||||
|
// Use first compile unit marked as isMain as the compile unit for this
|
||||||
|
// module.
|
||||||
|
if (ModuleCU || !DIUnit.isMain())
|
||||||
|
return;
|
||||||
StringRef FN = DIUnit.getFilename();
|
StringRef FN = DIUnit.getFilename();
|
||||||
StringRef Dir = DIUnit.getDirectory();
|
StringRef Dir = DIUnit.getDirectory();
|
||||||
unsigned ID = GetOrCreateSourceID(Dir, FN);
|
unsigned ID = GetOrCreateSourceID(Dir, FN);
|
||||||
|
@ -1653,14 +1656,9 @@ CompileUnit *DwarfDebug::constructCompileUnit(MDNode *N) {
|
||||||
addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
|
addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
|
||||||
dwarf::DW_FORM_data1, RVer);
|
dwarf::DW_FORM_data1, RVer);
|
||||||
|
|
||||||
CompileUnit *Unit = new CompileUnit(ID, Die);
|
assert(!ModuleCU &&
|
||||||
if (!ModuleCU && DIUnit.isMain()) {
|
"ModuleCU assigned since the top of constructCompileUnit");
|
||||||
// Use first compile unit marked as isMain as the compile unit
|
ModuleCU = new CompileUnit(ID, Die);
|
||||||
// for this module.
|
|
||||||
ModuleCU = Unit;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Unit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DwarfDebug::constructGlobalVariableDIE(MDNode *N) {
|
void DwarfDebug::constructGlobalVariableDIE(MDNode *N) {
|
||||||
|
@ -1898,6 +1896,9 @@ void DwarfDebug::endModule() {
|
||||||
// Emit inline info.
|
// Emit inline info.
|
||||||
emitDebugInlineInfo();
|
emitDebugInlineInfo();
|
||||||
|
|
||||||
|
delete ModuleCU;
|
||||||
|
ModuleCU = NULL; // Reset for the next Module, if any.
|
||||||
|
|
||||||
if (TimePassesIsEnabled)
|
if (TimePassesIsEnabled)
|
||||||
DebugTimer->stopTimer();
|
DebugTimer->stopTimer();
|
||||||
}
|
}
|
||||||
|
|
|
@ -473,7 +473,7 @@ class DwarfDebug : public DwarfPrinter {
|
||||||
/// as well.
|
/// as well.
|
||||||
unsigned GetOrCreateSourceID(StringRef DirName, StringRef FileName);
|
unsigned GetOrCreateSourceID(StringRef DirName, StringRef FileName);
|
||||||
|
|
||||||
CompileUnit *constructCompileUnit(MDNode *N);
|
void constructCompileUnit(MDNode *N);
|
||||||
|
|
||||||
void constructGlobalVariableDIE(MDNode *N);
|
void constructGlobalVariableDIE(MDNode *N);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue