DebugInfo: Allow the addition of other (such as static data) members to a record...
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 16 Aug 2013 20:42:14 +0000 (20:42 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 16 Aug 2013 20:42:14 +0000 (20:42 +0000)
Plus a type cleanup & minor fix to enumerate members of declarations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188577 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/DIBuilder.h
include/llvm/DebugInfo.h
lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/IR/DIBuilder.cpp
lib/IR/DebugInfo.cpp

index a15d619097ed9f0e685826e146e8229654bde7ab..941ed046883030055fe4665105f03d1f99fc1623 100644 (file)
@@ -419,9 +419,11 @@ namespace llvm {
     DIType createObjectPointerType(DIType Ty);
 
     /// createForwardDecl - Create a temporary forward-declared type.
-    DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope,
-                             DIFile F, unsigned Line, unsigned RuntimeLang = 0,
-                             uint64_t SizeInBits = 0, uint64_t AlignInBits = 0);
+    DICompositeType createForwardDecl(unsigned Tag, StringRef Name,
+                                      DIDescriptor Scope, DIFile F,
+                                      unsigned Line, unsigned RuntimeLang = 0,
+                                      uint64_t SizeInBits = 0,
+                                      uint64_t AlignInBits = 0);
 
     /// retainType - Retain DIType in a module even if it is not referenced
     /// through debug info anchors.
index b02446abbbfdd0e4957b6a785f8d07a924664bbb..2efc730f09d7262575ad74ff5bc0f65b88b6d5d5 100644 (file)
@@ -323,7 +323,7 @@ namespace llvm {
 
     DIArray getTypeArray() const { return getFieldAs<DIArray>(10); }
     void setTypeArray(DIArray Elements, DIArray TParams = DIArray());
-    void addMember(DISubprogram S);
+    void addMember(DIDescriptor D);
     unsigned getRunTimeLang() const { return getUnsignedField(11); }
     DICompositeType getContainingType() const {
       return getFieldAs<DICompositeType>(12);
index 803a35d9e4c0da550b1b1602f36d286b4a4f12b0..3d2c1b8868e67553b8f91f25cb354da57d5db66a 100644 (file)
@@ -981,9 +981,6 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
   case dwarf::DW_TAG_structure_type:
   case dwarf::DW_TAG_union_type:
   case dwarf::DW_TAG_class_type: {
-    if (CTy.isForwardDecl())
-      break;
-
     // Add elements to structure type.
     DIArray Elements = CTy.getTypeArray();
     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
index e36d0288992a553efda619c04fe756b4d9ded043..665e16ea8a74ebb436680c31decf5becbd82abb6 100644 (file)
@@ -844,7 +844,7 @@ DIDescriptor DIBuilder::createUnspecifiedParameter() {
 
 /// createForwardDecl - Create a temporary forward-declared type that
 /// can be RAUW'd if the full type is seen.
-DIType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name,
+DICompositeType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name,
                                     DIDescriptor Scope, DIFile F,
                                     unsigned Line, unsigned RuntimeLang,
                                     uint64_t SizeInBits,
@@ -863,11 +863,12 @@ DIType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name,
                      DIDescriptor::FlagFwdDecl),
     NULL,
     DIArray(),
-    ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang)
+    ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang),
+    NULL
   };
   MDNode *Node = MDNode::getTemporary(VMContext, Elts);
-  DIType RetTy(Node);
-  assert(RetTy.isType() &&
+  DICompositeType RetTy(Node);
+  assert(RetTy.isCompositeType() &&
          "createForwardDecl result should be a DIType");
   return RetTy;
 }
index 0f7ddb5961c856d92a039455c4cdec369b71a89d..cffc2ac1f221722cd2e0cf7c7cccfa520ce45569 100644 (file)
@@ -647,7 +647,7 @@ void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) {
   DbgNode = N;
 }
 
-void DICompositeType::addMember(DISubprogram S) {
+void DICompositeType::addMember(DIDescriptor D) {
   SmallVector<llvm::Value *, 16> M;
   DIArray OrigM = getTypeArray();
   unsigned Elements = OrigM.getNumElements();
@@ -656,7 +656,7 @@ void DICompositeType::addMember(DISubprogram S) {
   M.reserve(Elements + 1);
   for (unsigned i = 0; i != Elements; ++i)
     M.push_back(OrigM.getElement(i));
-  M.push_back(S);
+  M.push_back(D);
   setTypeArray(DIArray(MDNode::get(DbgNode->getContext(), M)));
 }