//===-- DebugLoc.cpp ------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Implementation for DebugScopeTracker. // //===----------------------------------------------------------------------===// #include "llvm/CodeGen/DebugLoc.h" #include "llvm/CodeGen/MachineFunction.h" using namespace llvm; /// EnterDebugScope - Start a new debug scope. ScopeGV can be a DISubprogram /// or a DIBlock. void DebugScopeTracker::EnterDebugScope(GlobalVariable *ScopeGV, MachineFunction &MF) { assert(ScopeGV && "GlobalVariable for scope is null!"); CurScope = MF.CreateDebugScope(ScopeGV, CurScope); } /// ExitDebugScope - "Pop" a DISubprogram or a DIBlock. void DebugScopeTracker::ExitDebugScope(GlobalVariable *ScopeGV, MachineFunction &MF) { assert(ScopeGV && "GlobalVariable for scope is null!"); assert(!CurScope.isInvalid() && "Mismatched region.end ?"); // We may have skipped a region.end because it was in an unreachable block. // Go up the scope chain until we reach the scope that ScopeGV points to. DebugScopeInfo DSI; do { DSI = MF.getDebugScopeInfo(CurScope); CurScope = DSI.Parent; } while (!DSI.Parent.isInvalid() && DSI.GV != ScopeGV); }