[llvm-commits] [llvm] r97909 - in /llvm/trunk: include/llvm/ADT/STLExtras.h lib/CodeGen/AsmPrinter/DwarfDebug.cpp lib/CodeGen/AsmPrinter/DwarfDebug.h
Jeffrey Yasskin
jyasskin at google.com
Sat Mar 6 23:16:49 PST 2010
Author: jyasskin
Date: Sun Mar 7 01:16:49 2010
New Revision: 97909
URL: http://llvm.org/viewvc/llvm-project?rev=97909&view=rev
Log:
_2_ gcc crashes, ah, ah, ah...
(Rolling back r97906.)
Modified:
llvm/trunk/include/llvm/ADT/STLExtras.h
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
Modified: llvm/trunk/include/llvm/ADT/STLExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=97909&r1=97908&r2=97909&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/STLExtras.h (original)
+++ llvm/trunk/include/llvm/ADT/STLExtras.h Sun Mar 7 01:16:49 2010
@@ -279,28 +279,6 @@
qsort(&*Start, End-Start, sizeof(*Start), Compare);
}
-//===----------------------------------------------------------------------===//
-// Extra additions to <algorithm>
-//===----------------------------------------------------------------------===//
-
-/// For a container of pointers, deletes the pointers and then clears the
-/// container.
-template<typename Container>
-void DeleteContainerPointers(Container &C) {
- for (typename Container::iterator I = C.begin(), E = C.end(); I != E; ++I)
- delete *I;
- C.clear();
-}
-
-/// In a container of pairs (usually a map) whose second element is a pointer,
-/// deletes the second elements and then clears the container.
-template<typename Container>
-void DeleteContainerSeconds(Container &C) {
- for (typename Container::iterator I = C.begin(), E = C.end(); I != E; ++I)
- delete I->second;
- C.clear();
-}
-
} // End llvm namespace
#endif
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=97909&r1=97908&r2=97909&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Sun Mar 7 01:16:49 2010
@@ -23,7 +23,6 @@
#include "llvm/Target/TargetFrameInfo.h"
#include "llvm/Target/TargetLoweringObjectFile.h"
#include "llvm/Target/TargetRegisterInfo.h"
-#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
@@ -175,10 +174,8 @@
unsigned EndLabelID; // Label ID of the end of scope.
const MachineInstr *LastInsn; // Last instruction of this scope.
const MachineInstr *FirstInsn; // First instruction of this scope.
- // Scopes defined in scope. Contents not owned.
- SmallVector<DbgScope *, 4> Scopes;
- // Variables declared in scope. Contents owned.
- SmallVector<DbgVariable *, 8> Variables;
+ SmallVector<DbgScope *, 4> Scopes; // Scopes defined in scope.
+ SmallVector<DbgVariable *, 8> Variables;// Variables declared in scope.
// Private state for dump()
mutable unsigned IndentLevel;
@@ -199,8 +196,8 @@
MDNode *getScopeNode() const { return Desc.getNode(); }
unsigned getStartLabelID() const { return StartLabelID; }
unsigned getEndLabelID() const { return EndLabelID; }
- const SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
- const SmallVector<DbgVariable *, 8> &getVariables() { return Variables; }
+ SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
+ SmallVector<DbgVariable *, 8> &getVariables() { return Variables; }
void setStartLabelID(unsigned S) { StartLabelID = S; }
void setEndLabelID(unsigned E) { EndLabelID = E; }
void setLastInsn(const MachineInstr *MI) { LastInsn = MI; }
@@ -223,14 +220,14 @@
assert (getFirstInsn() && "First instruction is missing!");
// Use the end of last child scope as end of this scope.
- const SmallVector<DbgScope *, 4> &Scopes = getScopes();
+ SmallVector<DbgScope *, 4> &Scopes = getScopes();
const MachineInstr *LastInsn = getFirstInsn();
unsigned LIndex = 0;
if (Scopes.empty()) {
assert (getLastInsn() && "Inner most scope does not have last insn!");
return;
}
- for (SmallVector<DbgScope *, 4>::const_iterator SI = Scopes.begin(),
+ for (SmallVector<DbgScope *, 4>::iterator SI = Scopes.begin(),
SE = Scopes.end(); SI != SE; ++SI) {
DbgScope *DS = *SI;
DS->fixInstructionMarkers(MIIndexMap);
@@ -282,6 +279,8 @@
#endif
DbgScope::~DbgScope() {
+ for (unsigned i = 0, N = Scopes.size(); i < N; ++i)
+ delete Scopes[i];
for (unsigned j = 0, M = Variables.size(); j < M; ++j)
delete Variables[j];
}
@@ -1586,7 +1585,7 @@
}
// Add variables to scope.
- const SmallVector<DbgVariable *, 8> &Variables = Scope->getVariables();
+ SmallVector<DbgVariable *, 8> &Variables = Scope->getVariables();
for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
if (VariableDIE)
@@ -1594,7 +1593,7 @@
}
// Add nested scopes.
- const SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
+ SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
for (unsigned j = 0, M = Scopes.size(); j < M; ++j) {
// Define the Scope debug information entry.
DIE *NestedDIE = constructScopeDIE(Scopes[j]);
@@ -1697,6 +1696,7 @@
}
CompileUnitMap[DIUnit.getNode()] = Unit;
+ CompileUnits.push_back(Unit);
return Unit;
}
@@ -1802,7 +1802,7 @@
E = DbgFinder.compile_unit_end(); I != E; ++I)
constructCompileUnit(*I);
- if (CompileUnitMap.empty()) {
+ if (CompileUnits.empty()) {
if (TimePassesIsEnabled)
DebugTimer->stopTimer();
@@ -1812,7 +1812,7 @@
// If main compile unit for this module is not seen than randomly
// select first compile unit.
if (!ModuleCU)
- ModuleCU = CompileUnitMap.begin()->second;
+ ModuleCU = CompileUnits[0];
// Create DIEs for each subprogram.
for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
@@ -1944,10 +1944,6 @@
// Emit inline info.
emitDebugInlineInfo();
- // Clear debug info in preparation for the next Module.
- ModuleCU = NULL;
- DeleteContainerSeconds(CompileUnitMap);
-
if (TimePassesIsEnabled)
DebugTimer->stopTimer();
}
@@ -2118,9 +2114,9 @@
while (!WorkList.empty()) {
DbgScope *S = WorkList.back(); WorkList.pop_back();
- const SmallVector<DbgScope *, 4> &Children = S->getScopes();
+ SmallVector<DbgScope *, 4> &Children = S->getScopes();
if (!Children.empty())
- for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
+ for (SmallVector<DbgScope *, 4>::iterator SI = Children.begin(),
SE = Children.end(); SI != SE; ++SI)
WorkList.push_back(*SI);
@@ -2225,11 +2221,10 @@
// Clear debug info
CurrentFnDbgScope = NULL;
- DeleteContainerSeconds(DbgScopeMap);
+ DbgScopeMap.clear();
DbgScopeBeginMap.clear();
DbgScopeEndMap.clear();
ConcreteScopes.clear();
- DeleteContainerSeconds(AbstractScopes);
AbstractScopesList.clear();
Lines.clear();
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=97909&r1=97908&r2=97909&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Sun Mar 7 01:16:49 2010
@@ -66,6 +66,10 @@
/// compile units.
DenseMap<Value *, CompileUnit *> CompileUnitMap;
+ /// CompileUnits - All the compile units in this module.
+ ///
+ SmallVector<CompileUnit *, 8> CompileUnits;
+
/// ModuleCU - All DIEs are inserted in ModuleCU.
CompileUnit *ModuleCU;
@@ -130,8 +134,7 @@
//
DbgScope *CurrentFnDbgScope;
- /// DbgScopeMap - Tracks the scopes in the current function. Owns the
- /// contained DbgScope*s.
+ /// DbgScopeMap - Tracks the scopes in the current function.
///
DenseMap<MDNode *, DbgScope *> DbgScopeMap;
@@ -140,7 +143,7 @@
DenseMap<MDNode *, DbgScope *> ConcreteScopes;
/// AbstractScopes - Tracks the abstract scopes a module. These scopes are
- /// not included DbgScopeMap. AbstractScopes owns its DbgScope*s.
+ /// not included DbgScopeMap.
DenseMap<MDNode *, DbgScope *> AbstractScopes;
SmallVector<DbgScope *, 4>AbstractScopesList;
More information about the llvm-commits
mailing list