mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-04 21:30:49 +00:00
_2_ gcc crashes, ah, ah, ah...
(Rolling back r97906.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97909 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9cdd9659c3
commit
8c42ca9374
@ -279,28 +279,6 @@ static inline void array_pod_sort(IteratorTy Start, IteratorTy End,
|
||||
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
|
||||
|
@ -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 @@ class DbgScope {
|
||||
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 @@ public:
|
||||
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 @@ public:
|
||||
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 @@ void DbgScope::dump() const {
|
||||
#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 @@ DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
|
||||
}
|
||||
|
||||
// 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 @@ DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
|
||||
}
|
||||
|
||||
// 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 @@ CompileUnit *DwarfDebug::constructCompileUnit(MDNode *N) {
|
||||
}
|
||||
|
||||
CompileUnitMap[DIUnit.getNode()] = Unit;
|
||||
CompileUnits.push_back(Unit);
|
||||
return Unit;
|
||||
}
|
||||
|
||||
@ -1802,7 +1802,7 @@ void DwarfDebug::beginModule(Module *M, MachineModuleInfo *mmi) {
|
||||
E = DbgFinder.compile_unit_end(); I != E; ++I)
|
||||
constructCompileUnit(*I);
|
||||
|
||||
if (CompileUnitMap.empty()) {
|
||||
if (CompileUnits.empty()) {
|
||||
if (TimePassesIsEnabled)
|
||||
DebugTimer->stopTimer();
|
||||
|
||||
@ -1812,7 +1812,7 @@ void DwarfDebug::beginModule(Module *M, MachineModuleInfo *mmi) {
|
||||
// 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 @@ void DwarfDebug::endModule() {
|
||||
// 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 @@ bool DwarfDebug::extractScopeInformation() {
|
||||
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 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {
|
||||
|
||||
// Clear debug info
|
||||
CurrentFnDbgScope = NULL;
|
||||
DeleteContainerSeconds(DbgScopeMap);
|
||||
DbgScopeMap.clear();
|
||||
DbgScopeBeginMap.clear();
|
||||
DbgScopeEndMap.clear();
|
||||
ConcreteScopes.clear();
|
||||
DeleteContainerSeconds(AbstractScopes);
|
||||
AbstractScopesList.clear();
|
||||
Lines.clear();
|
||||
|
||||
|
@ -66,6 +66,10 @@ class DwarfDebug : public DwarfPrinter {
|
||||
/// 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 @@ class DwarfDebug : public DwarfPrinter {
|
||||
//
|
||||
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 @@ class DwarfDebug : public DwarfPrinter {
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user