From: Devang Patel Date: Mon, 31 Aug 2009 21:34:44 +0000 (+0000) Subject: Derive DICompileUnit from DIScope. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c9f322d9a62c57ba965678a874faad6d239b9256;p=oota-llvm.git Derive DICompileUnit from DIScope. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80627 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h index 314873a384b..e6737d0ef0a 100644 --- a/include/llvm/Analysis/DebugInfo.h +++ b/include/llvm/Analysis/DebugInfo.h @@ -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 { diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index e815931e611..3e3b8023024 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -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 //===----------------------------------------------------------------------===//