diff options
| author | Manman Ren <manman.ren@gmail.com> | 2013-07-22 20:28:53 +0000 |
|---|---|---|
| committer | Manman Ren <manman.ren@gmail.com> | 2013-07-22 20:28:53 +0000 |
| commit | 14dd2a656e0b65553a82026f181b73a3f479d20d (patch) | |
| tree | 3f480b52708dc6ebdbd8a1930d236392992ae9b9 /llvm | |
| parent | 55b0be72d11ce678df24d8971d5553415a0edd61 (diff) | |
| download | bcm5719-llvm-14dd2a656e0b65553a82026f181b73a3f479d20d.tar.gz bcm5719-llvm-14dd2a656e0b65553a82026f181b73a3f479d20d.zip | |
Debug Info Finder: add processScope to actually handle the Scope.
Instead of just adding the scope to the list, we actually handle the scope.
llvm-svn: 186867
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/DebugInfo.h | 2 | ||||
| -rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 26 |
2 files changed, 25 insertions, 3 deletions
diff --git a/llvm/include/llvm/DebugInfo.h b/llvm/include/llvm/DebugInfo.h index 5c74b172e9f..d05b3287443 100644 --- a/llvm/include/llvm/DebugInfo.h +++ b/llvm/include/llvm/DebugInfo.h @@ -756,6 +756,8 @@ namespace llvm { /// processLocation - Process DILocation. void processLocation(DILocation Loc); + void processScope(DIScope Scope); + /// addCompileUnit - Add compile unit into CUs. bool addCompileUnit(DICompileUnit CU); diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index f6ffc039dcb..f63fa1a22d0 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -857,7 +857,7 @@ void DebugInfoFinder::processModule(const Module &M) { for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) { DIGlobalVariable DIG(GVs.getElement(i)); if (addGlobalVariable(DIG)) { - addScope(DIG.getContext()); + processScope(DIG.getContext()); processType(DIG.getType()); } } @@ -897,7 +897,7 @@ void DebugInfoFinder::processLocation(DILocation Loc) { void DebugInfoFinder::processType(DIType DT) { if (!addType(DT)) return; - addScope(DT.getContext()); + processScope(DT.getContext()); if (DT.isCompositeType()) { DICompositeType DCT(DT); processType(DCT.getTypeDerivedFrom()); @@ -915,6 +915,26 @@ void DebugInfoFinder::processType(DIType DT) { } } +void DebugInfoFinder::processScope(DIScope Scope) { + if (Scope.isType()) { + DIType Ty(Scope); + processType(Ty); + return; + } + if (!addScope(Scope)) + return; + if (Scope.isLexicalBlock()) { + DILexicalBlock LB(Scope); + processScope(LB.getContext()); + } else if (Scope.isLexicalBlockFile()) { + DILexicalBlockFile LBF = DILexicalBlockFile(Scope); + processScope(LBF.getScope()); + } else if (Scope.isNameSpace()) { + DINameSpace NS(Scope); + processScope(NS.getContext()); + } +} + /// processLexicalBlock void DebugInfoFinder::processLexicalBlock(DILexicalBlock LB) { DIScope Context = LB.getContext(); @@ -932,7 +952,7 @@ void DebugInfoFinder::processLexicalBlock(DILexicalBlock LB) { void DebugInfoFinder::processSubprogram(DISubprogram SP) { if (!addSubprogram(SP)) return; - addScope(SP.getContext()); + processScope(SP.getContext()); processType(SP.getType()); } |

