From 2a574669f3aed5951dcd62fa14c25dcde4d1a754 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 20 Jan 2009 22:27:02 +0000 Subject: [PATCH] Appropriately mark fowrad decls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62625 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/DebugInfo.h | 10 ++++++++++ lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 19 ++++++++----------- test/DebugInfo/forwardDecl.ll | 1 - 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h index 3f9f984f41d..41095514815 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 dccd59c8720..a2934bd8c75 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 cf0923edae9..a8bb9fffd0b 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 }