Derive DICompileUnit from DIScope.
authorDevang Patel <dpatel@apple.com>
Mon, 31 Aug 2009 21:34:44 +0000 (21:34 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 31 Aug 2009 21:34:44 +0000 (21:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80627 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DebugInfo.h
lib/Analysis/DebugInfo.cpp

index 314873a384b8fba1194f4a175f7bb2f6416fee00..e6737d0ef0a9eba60207a538a03aa1a98bfd6762 100644 (file)
@@ -95,6 +95,7 @@ namespace llvm {
     bool isSubprogram() const;
     bool isGlobalVariable() const;
     bool isScope() const;
+    bool isCompileUnit() const;
   };
 
   /// DISubrange - This is used to represent ranges, for array bounds.
@@ -129,10 +130,13 @@ namespace llvm {
   };
 
   /// DICompileUnit - A wrapper for a compile unit.
-  class DICompileUnit : public DIDescriptor {
+  class DICompileUnit : public DIScope {
   public:
-    explicit DICompileUnit(MDNode *N = 0)
-      : DIDescriptor(N, dwarf::DW_TAG_compile_unit) {}
+    explicit DICompileUnit(MDNode *N = 0) {
+      DbgNode = N;
+      if (DbgNode && !isCompileUnit())
+       DbgNode = 0;
+    }
 
     unsigned getLanguage() const     { return getUnsignedField(2); }
     const std::string &getFilename(std::string &F) const {
index e815931e611743840afb440c6f10a5ff45a6efbe..3e3b8023024b490a9733245f33258f58ea93bac9 100644 (file)
@@ -227,6 +227,14 @@ bool DIDescriptor::isScope() const {
   return false;
 }
 
+/// isCompileUnit - Return true if the specified tag is DW_TAG_compile_unit.
+bool DIDescriptor::isCompileUnit() const {
+  assert (!isNull() && "Invalid descriptor!");
+  unsigned Tag = getTag();
+
+  return Tag == dwarf::DW_TAG_compile_unit;
+}
+
 //===----------------------------------------------------------------------===//
 // Simple Descriptor Constructors and other Methods
 //===----------------------------------------------------------------------===//