aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-01-20 22:27:02 +0000
committerDevang Patel <dpatel@apple.com>2009-01-20 22:27:02 +0000
commit2a574669f3aed5951dcd62fa14c25dcde4d1a754 (patch)
treeb4025be375e5ca427a72ee3964d8bab0b70e5c8a
parenteeb90e3094c8d5480747e39ab5dcd3ba156009c7 (diff)
downloadexternal_llvm-2a574669f3aed5951dcd62fa14c25dcde4d1a754.zip
external_llvm-2a574669f3aed5951dcd62fa14c25dcde4d1a754.tar.gz
external_llvm-2a574669f3aed5951dcd62fa14c25dcde4d1a754.tar.bz2
Appropriately mark fowrad decls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62625 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/DebugInfo.h10
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfWriter.cpp19
-rw-r--r--test/DebugInfo/forwardDecl.ll1
3 files changed, 18 insertions, 12 deletions
diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h
index 3f9f984..4109551 100644
--- a/include/llvm/Analysis/DebugInfo.h
+++ b/include/llvm/Analysis/DebugInfo.h
@@ -129,6 +129,13 @@ namespace llvm {
/// FIXME: Types should be factored much better so that CV qualifiers and
/// others do not require a huge and empty descriptor full of zeros.
class DIType : public DIDescriptor {
+ public:
+ enum {
+ FlagPrivate = 1 << 0,
+ FlagProtected = 1 << 1,
+ FlagFwdDecl = 1 << 2
+ };
+
protected:
DIType(GlobalVariable *GV, unsigned Tag) : DIDescriptor(GV, Tag) {}
// This ctor is used when the Tag has already been validated by a derived
@@ -167,6 +174,9 @@ namespace llvm {
// carry this is just plain insane.
uint64_t getOffsetInBits() const { return getUInt64Field(7); }
unsigned getFlags() const { return getUnsignedField(8); }
+ bool isPrivate() const { return (getFlags() & FlagPrivate) != 0; }
+ bool isProtected() const { return (getFlags() & FlagProtected) != 0; }
+ bool isForwardDecl() const { return (getFlags() & FlagFwdDecl) != 0; }
virtual std::string getFilename() const {
assert (0 && "Invalid DIDescriptor");
diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
index dccd59c..a2934bd 100644
--- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
@@ -1820,19 +1820,16 @@ private:
if (Size)
AddUInt(&Buffer, DW_AT_byte_size, 0, Size);
else {
- // Add zero size even if it is not a forward declaration.
- // FIXME - Enable this.
- // if (!CTy.isDefinition())
- // AddUInt(&Buffer, DW_AT_declaration, DW_FORM_flag, 1);
- // else
- // AddUInt(&Buffer, DW_AT_byte_size, 0, 0);
+ // Add zero size if it is not a forward declaration.
+ if (CTy.isForwardDecl())
+ AddUInt(&Buffer, DW_AT_declaration, DW_FORM_flag, 1);
+ else
+ AddUInt(&Buffer, DW_AT_byte_size, 0, 0);
}
- // Add source line info if available and TyDesc is not a forward
- // declaration.
- // FIXME - Enable this.
- // if (CTy.isForwardDecl())
- // AddSourceLine(&Buffer, *CTy);
+ // Add source line info if available.
+ if (!CTy.isForwardDecl())
+ AddSourceLine(&Buffer, &CTy);
}
// ConstructSubrangeDIE - Construct subrange DIE from DISubrange.
diff --git a/test/DebugInfo/forwardDecl.ll b/test/DebugInfo/forwardDecl.ll
index cf0923e..a8bb9ff 100644
--- a/test/DebugInfo/forwardDecl.ll
+++ b/test/DebugInfo/forwardDecl.ll
@@ -1,5 +1,4 @@
; RUN: llvm-as < %s | llc | %prcontext ST 1 | grep 0x1 | count 1
-; XFAIL: *
target triple = "i386-apple-darwin9.6"
%llvm.dbg.anchor.type = type { i32, i32 }