diff options
author | Manman Ren <manman.ren@gmail.com> | 2013-07-27 01:26:08 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2013-07-27 01:26:08 +0000 |
commit | 2d69cc4baec46899cef88e14d8b9baf1c196fbcd (patch) | |
tree | 130666d4dec619d91929f9be2624f7011994a733 /lib | |
parent | b66d765993211e907f9c06f923d6830c33016044 (diff) | |
download | llvm-2d69cc4baec46899cef88e14d8b9baf1c196fbcd.tar.gz llvm-2d69cc4baec46899cef88e14d8b9baf1c196fbcd.tar.bz2 llvm-2d69cc4baec46899cef88e14d8b9baf1c196fbcd.tar.xz |
Debug Info Verifier: verify SPs in llvm.dbg.sp.
Also always add DIType, DISubprogram and DIGlobalVariable to the list
in DebugInfoFinder without checking them, so we can verify them later
on.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187285 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/IR/DebugInfo.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp index 58f054cf9f..e8334f5374 100644 --- a/lib/IR/DebugInfo.cpp +++ b/lib/IR/DebugInfo.cpp @@ -908,6 +908,10 @@ void DebugInfoFinder::processModule(const Module &M) { return; } } + if (NamedMDNode *SP_Nodes = M.getNamedMetadata("llvm.dbg.sp")) { + for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i) + processSubprogram(DISubprogram(SP_Nodes->getOperand(i))); + } } /// processLocation - Process DILocation. @@ -1029,7 +1033,7 @@ void DebugInfoFinder::processValue(const DbgValueInst *DVI) { /// addType - Add type into Tys. bool DebugInfoFinder::addType(DIType DT) { - if (!DT.isValid()) + if (!DT) return false; if (!NodesSeen.insert(DT)) @@ -1041,6 +1045,8 @@ bool DebugInfoFinder::addType(DIType DT) { /// addCompileUnit - Add compile unit into CUs. bool DebugInfoFinder::addCompileUnit(DICompileUnit CU) { + if (!CU) + return false; if (!NodesSeen.insert(CU)) return false; @@ -1050,7 +1056,7 @@ bool DebugInfoFinder::addCompileUnit(DICompileUnit CU) { /// addGlobalVariable - Add global variable into GVs. bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable DIG) { - if (!DIDescriptor(DIG).isGlobalVariable()) + if (!DIG) return false; if (!NodesSeen.insert(DIG)) @@ -1062,7 +1068,7 @@ bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable DIG) { // addSubprogram - Add subprgoram into SPs. bool DebugInfoFinder::addSubprogram(DISubprogram SP) { - if (!DIDescriptor(SP).isSubprogram()) + if (!SP) return false; if (!NodesSeen.insert(SP)) |