aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-08-31 20:44:45 +0000
committerDevang Patel <dpatel@apple.com>2009-08-31 20:44:45 +0000
commit43d98b3c4ecd564d4666468983322c019819f730 (patch)
tree6db693366f7d4bf9918fb8439c7d4c1cfffb962d
parent5a68509b17c8e332a434d890e1296ba677c51b03 (diff)
downloadexternal_llvm-43d98b3c4ecd564d4666468983322c019819f730.zip
external_llvm-43d98b3c4ecd564d4666468983322c019819f730.tar.gz
external_llvm-43d98b3c4ecd564d4666468983322c019819f730.tar.bz2
Introduce DIScope.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80620 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/DebugInfo.h10
-rw-r--r--lib/Analysis/DebugInfo.cpp16
2 files changed, 26 insertions, 0 deletions
diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h
index 01c1dec..b8a6ce3 100644
--- a/include/llvm/Analysis/DebugInfo.h
+++ b/include/llvm/Analysis/DebugInfo.h
@@ -94,6 +94,7 @@ namespace llvm {
bool isVariable() const;
bool isSubprogram() const;
bool isGlobalVariable() const;
+ bool isScope() const;
};
/// DISubrange - This is used to represent ranges, for array bounds.
@@ -118,6 +119,15 @@ namespace llvm {
}
};
+ /// DIScope - A base class for various scopes.
+ class DIScope : public DIDescriptor {
+ public:
+ explicit DIScope(MDNode *N = 0) : DIDescriptor (N) {
+ if (DbgNode && !isScope())
+ DbgNode = 0;
+ }
+ };
+
/// DICompileUnit - A wrapper for a compile unit.
class DICompileUnit : public DIDescriptor {
public:
diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp
index a67539c..e815931 100644
--- a/lib/Analysis/DebugInfo.cpp
+++ b/lib/Analysis/DebugInfo.cpp
@@ -210,6 +210,22 @@ bool DIDescriptor::isGlobalVariable() const {
return Tag == dwarf::DW_TAG_variable;
}
+/// isScope - Return true if the specified tag is one of the scope
+/// related tag.
+bool DIDescriptor::isScope() const {
+ assert (!isNull() && "Invalid descriptor!");
+ unsigned Tag = getTag();
+
+ switch (Tag) {
+ case dwarf::DW_TAG_compile_unit:
+ case dwarf::DW_TAG_lexical_block:
+ case dwarf::DW_TAG_subprogram:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
//===----------------------------------------------------------------------===//
// Simple Descriptor Constructors and other Methods