diff options
| author | Wolfgang Pieb <Wolfgang.Pieb@sony.com> | 2017-07-19 19:36:40 +0000 |
|---|---|---|
| committer | Wolfgang Pieb <Wolfgang.Pieb@sony.com> | 2017-07-19 19:36:40 +0000 |
| commit | e018bbd83594507171bc731b2d922fe0eed64595 (patch) | |
| tree | a92736795040543482116561974449e234bee852 /llvm/lib/CodeGen | |
| parent | 17b1ecfdc5b29215a9d73cee89eb85cf35f23866 (diff) | |
| download | bcm5719-llvm-e018bbd83594507171bc731b2d922fe0eed64595.tar.gz bcm5719-llvm-e018bbd83594507171bc731b2d922fe0eed64595.zip | |
Fixing an issue with the initialization of LexicalScopes objects when mixing debug
and non-debug units.
Patch by Andrea DiBiagio.
Differential Revision: https://reviews.llvm.org/D35637
llvm-svn: 308513
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/LexicalScopes.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LiveDebugValues.cpp | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/LexicalScopes.cpp b/llvm/lib/CodeGen/LexicalScopes.cpp index 995c58a6356..47ab4ef65c7 100644 --- a/llvm/lib/CodeGen/LexicalScopes.cpp +++ b/llvm/lib/CodeGen/LexicalScopes.cpp @@ -47,11 +47,11 @@ void LexicalScopes::reset() { /// initialize - Scan machine function and constuct lexical scope nest. void LexicalScopes::initialize(const MachineFunction &Fn) { + reset(); // Don't attempt any lexical scope creation for a NoDebug compile unit. if (Fn.getFunction()->getSubprogram()->getUnit()->getEmissionKind() == DICompileUnit::NoDebug) return; - reset(); MF = &Fn; SmallVector<InsnRange, 4> MIRanges; DenseMap<const MachineInstr *, LexicalScope *> MI2ScopeMap; @@ -277,7 +277,9 @@ void LexicalScopes::assignInstructionRanges( /// DebugLoc. void LexicalScopes::getMachineBasicBlocks( const DILocation *DL, SmallPtrSetImpl<const MachineBasicBlock *> &MBBs) { + assert(MF && "Method called on a uninitialized LexicalScopes object!"); MBBs.clear(); + LexicalScope *Scope = getOrCreateLexicalScope(DL); if (!Scope) return; @@ -296,6 +298,7 @@ void LexicalScopes::getMachineBasicBlocks( /// dominates - Return true if DebugLoc's lexical scope dominates at least one /// machine instruction's lexical scope in a given machine basic block. bool LexicalScopes::dominates(const DILocation *DL, MachineBasicBlock *MBB) { + assert(MF && "Unexpected uninitialized LexicalScopes object!"); LexicalScope *Scope = getOrCreateLexicalScope(DL); if (!Scope) return false; diff --git a/llvm/lib/CodeGen/LiveDebugValues.cpp b/llvm/lib/CodeGen/LiveDebugValues.cpp index b5e705f6455..4614ddce5e0 100644 --- a/llvm/lib/CodeGen/LiveDebugValues.cpp +++ b/llvm/lib/CodeGen/LiveDebugValues.cpp @@ -1,4 +1,4 @@ -//===------ LiveDebugValues.cpp - Tracking Debug Value MIs ----------------===// +//===------ LiveDebugValues.cpp - Tracking Debug Value MIs ----------------===//G // // The LLVM Compiler Infrastructure // @@ -702,6 +702,11 @@ bool LiveDebugValues::runOnMachineFunction(MachineFunction &MF) { // LiveDebugValues will already have removed all DBG_VALUEs. return false; + // Skip functions from NoDebug compilation units. + if (MF.getFunction()->getSubprogram()->getUnit()->getEmissionKind() == + DICompileUnit::NoDebug) + return false; + TRI = MF.getSubtarget().getRegisterInfo(); TII = MF.getSubtarget().getInstrInfo(); TFI = MF.getSubtarget().getFrameLowering(); |

