DebugInfo: Delete old subclasses of DIType
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Mon, 20 Apr 2015 21:17:32 +0000 (21:17 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Mon, 20 Apr 2015 21:17:32 +0000 (21:17 +0000)
Delete subclasses of (the already deleted) `DIType` in favour of
directly using pointers from the `Metadata` hierarchy.

While `DICompositeType` wraps `MDCompositeTypeBase` and `DIDerivedType`
wraps `MDDerivedTypeBase`, most uses of each really meant the more
specific `MDCompositeType` and `MDDerivedType`.

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

bindings/go/llvm/DIBuilderBindings.cpp
include/llvm/IR/DebugInfo.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.h

index cfae605..cd538e3 100644 (file)
@@ -104,8 +104,7 @@ LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Dref,
                                              uint64_t AlignInBits,
                                              unsigned Encoding) {
   DIBuilder *D = unwrap(Dref);
-  DIBasicType T = D->createBasicType(Name, SizeInBits, AlignInBits, Encoding);
-  return wrap(T);
+  return wrap(D->createBasicType(Name, SizeInBits, AlignInBits, Encoding));
 }
 
 LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef Dref,
@@ -114,19 +113,17 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef Dref,
                                                uint64_t AlignInBits,
                                                const char *Name) {
   DIBuilder *D = unwrap(Dref);
-  DIDerivedType T = D->createPointerType(unwrap<MDType>(PointeeType),
-                                         SizeInBits, AlignInBits, Name);
-  return wrap(T);
+  return wrap(D->createPointerType(unwrap<MDType>(PointeeType), SizeInBits,
+                                   AlignInBits, Name));
 }
 
 LLVMMetadataRef
 LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Dref, LLVMMetadataRef File,
                                   LLVMMetadataRef ParameterTypes) {
   DIBuilder *D = unwrap(Dref);
-  DICompositeType CT =
+  return wrap(
       D->createSubroutineType(File ? unwrap<MDFile>(File) : nullptr,
-                              DITypeArray(unwrap<MDTuple>(ParameterTypes)));
-  return wrap(CT);
+                              DITypeArray(unwrap<MDTuple>(ParameterTypes))));
 }
 
 LLVMMetadataRef LLVMDIBuilderCreateStructType(
@@ -135,12 +132,11 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType(
     uint64_t AlignInBits, unsigned Flags, LLVMMetadataRef DerivedFrom,
     LLVMMetadataRef ElementTypes) {
   DIBuilder *D = unwrap(Dref);
-  DICompositeType CT = D->createStructType(
+  return wrap(D->createStructType(
       unwrap<MDScope>(Scope), Name, File ? unwrap<MDFile>(File) : nullptr, Line,
       SizeInBits, AlignInBits, Flags,
       DerivedFrom ? unwrap<MDType>(DerivedFrom) : nullptr,
-      ElementTypes ? DIArray(unwrap<MDTuple>(ElementTypes)) : nullptr);
-  return wrap(CT);
+      ElementTypes ? DIArray(unwrap<MDTuple>(ElementTypes)) : nullptr));
 }
 
 LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType(
@@ -149,10 +145,9 @@ LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType(
     unsigned RuntimeLang, uint64_t SizeInBits, uint64_t AlignInBits,
     unsigned Flags) {
   DIBuilder *D = unwrap(Dref);
-  DICompositeType CT = D->createReplaceableCompositeType(
+  return wrap(D->createReplaceableCompositeType(
       Tag, Name, unwrap<MDScope>(Scope), File ? unwrap<MDFile>(File) : nullptr,
-      Line, RuntimeLang, SizeInBits, AlignInBits, Flags);
-  return wrap(CT);
+      Line, RuntimeLang, SizeInBits, AlignInBits, Flags));
 }
 
 LLVMMetadataRef
@@ -162,10 +157,9 @@ LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef Dref, LLVMMetadataRef Scope,
                               uint64_t AlignInBits, uint64_t OffsetInBits,
                               unsigned Flags, LLVMMetadataRef Ty) {
   DIBuilder *D = unwrap(Dref);
-  DIDerivedType DT = D->createMemberType(
+  return wrap(D->createMemberType(
       unwrap<MDScope>(Scope), Name, File ? unwrap<MDFile>(File) : nullptr, Line,
-      SizeInBits, AlignInBits, OffsetInBits, Flags, unwrap<MDType>(Ty));
-  return wrap(DT);
+      SizeInBits, AlignInBits, OffsetInBits, Flags, unwrap<MDType>(Ty)));
 }
 
 LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Dref,
@@ -174,10 +168,9 @@ LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Dref,
                                              LLVMMetadataRef ElementType,
                                              LLVMMetadataRef Subscripts) {
   DIBuilder *D = unwrap(Dref);
-  DICompositeType CT =
-      D->createArrayType(SizeInBits, AlignInBits, unwrap<MDType>(ElementType),
-                         DIArray(unwrap<MDTuple>(Subscripts)));
-  return wrap(CT);
+  return wrap(D->createArrayType(SizeInBits, AlignInBits,
+                                 unwrap<MDType>(ElementType),
+                                 DIArray(unwrap<MDTuple>(Subscripts))));
 }
 
 LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Dref,
@@ -185,10 +178,9 @@ LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Dref,
                                            LLVMMetadataRef File, unsigned Line,
                                            LLVMMetadataRef Context) {
   DIBuilder *D = unwrap(Dref);
-  DIDerivedType DT = D->createTypedef(
-      unwrap<MDType>(Ty), Name, File ? unwrap<MDFile>(File) : nullptr, Line,
-      Context ? unwrap<MDScope>(Context) : nullptr);
-  return wrap(DT);
+  return wrap(D->createTypedef(unwrap<MDType>(Ty), Name,
+                               File ? unwrap<MDFile>(File) : nullptr, Line,
+                               Context ? unwrap<MDScope>(Context) : nullptr));
 }
 
 LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Dref,
index f7bba35..53c5e9a 100644 (file)
@@ -62,10 +62,6 @@ typedef DenseMap<const MDString *, MDNode *> DITypeIdentifierMap;
   template <> struct simplify_type<DESC>;
 DECLARE_SIMPLIFY_DESCRIPTOR(DISubrange)
 DECLARE_SIMPLIFY_DESCRIPTOR(DIEnumerator)
-DECLARE_SIMPLIFY_DESCRIPTOR(DIBasicType)
-DECLARE_SIMPLIFY_DESCRIPTOR(DIDerivedType)
-DECLARE_SIMPLIFY_DESCRIPTOR(DICompositeType)
-DECLARE_SIMPLIFY_DESCRIPTOR(DISubroutineType)
 DECLARE_SIMPLIFY_DESCRIPTOR(DIFile)
 DECLARE_SIMPLIFY_DESCRIPTOR(DICompileUnit)
 DECLARE_SIMPLIFY_DESCRIPTOR(DISubprogram)
@@ -108,55 +104,6 @@ public:
   MDEnumerator &operator*() const { return *N; }
 };
 
-class DIBasicType {
-  MDBasicType *N;
-
-public:
-  DIBasicType(const MDBasicType *N = nullptr)
-      : N(const_cast<MDBasicType *>(N)) {}
-
-  operator MDBasicType *() const { return N; }
-  MDBasicType *operator->() const { return N; }
-  MDBasicType &operator*() const { return *N; }
-};
-
-class DIDerivedType {
-  MDDerivedTypeBase *N;
-
-public:
-  DIDerivedType(const MDDerivedTypeBase *N = nullptr)
-      : N(const_cast<MDDerivedTypeBase *>(N)) {}
-
-  operator MDDerivedTypeBase *() const { return N; }
-  MDDerivedTypeBase *operator->() const { return N; }
-  MDDerivedTypeBase &operator*() const { return *N; }
-};
-
-class DICompositeType {
-  MDCompositeTypeBase *N;
-
-public:
-  DICompositeType(const MDCompositeTypeBase *N = nullptr)
-      : N(const_cast<MDCompositeTypeBase *>(N)) {}
-
-  operator MDCompositeTypeBase *() const { return N; }
-  MDCompositeTypeBase *operator->() const { return N; }
-  MDCompositeTypeBase &operator*() const { return *N; }
-};
-
-class DISubroutineType {
-  MDSubroutineType *N;
-
-public:
-  DISubroutineType(const MDSubroutineType *N = nullptr)
-      : N(const_cast<MDSubroutineType *>(N)) {}
-
-  operator DICompositeType() const { return N; }
-  operator MDSubroutineType *() const { return N; }
-  MDSubroutineType *operator->() const { return N; }
-  MDSubroutineType &operator*() const { return *N; }
-};
-
 class DIFile {
   MDFile *N;
 
@@ -331,10 +278,6 @@ public:
   template <> struct simplify_type<DESC> : simplify_type<const DESC> {};
 SIMPLIFY_DESCRIPTOR(DISubrange)
 SIMPLIFY_DESCRIPTOR(DIEnumerator)
-SIMPLIFY_DESCRIPTOR(DIBasicType)
-SIMPLIFY_DESCRIPTOR(DIDerivedType)
-SIMPLIFY_DESCRIPTOR(DICompositeType)
-SIMPLIFY_DESCRIPTOR(DISubroutineType)
 SIMPLIFY_DESCRIPTOR(DIFile)
 SIMPLIFY_DESCRIPTOR(DICompileUnit)
 SIMPLIFY_DESCRIPTOR(DISubprogram)
index ee126f4..b2a2220 100644 (file)
@@ -1902,7 +1902,7 @@ static uint64_t makeTypeSignature(StringRef Identifier) {
 
 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
                                       StringRef Identifier, DIE &RefDie,
-                                      DICompositeType CTy) {
+                                      const MDCompositeType *CTy) {
   // Fast path if we're building some type units and one has already used the
   // address pool we know we're going to throw away all this work anyway, so
   // don't bother building dependent types.
index 4a139ce..ef97112 100644 (file)
@@ -268,7 +268,8 @@ class DwarfDebug : public AsmPrinterHandler {
   // them.
   DenseMap<const MDNode *, const DwarfTypeUnit *> DwarfTypeUnits;
 
-  SmallVector<std::pair<std::unique_ptr<DwarfTypeUnit>, DICompositeType>, 1>
+  SmallVector<
+      std::pair<std::unique_ptr<DwarfTypeUnit>, const MDCompositeType *>, 1>
       TypeUnitsUnderConstruction;
 
   // Whether to emit the pubnames/pubtypes sections.
@@ -519,7 +520,7 @@ public:
   /// \brief Add a DIE to the set of types that we're going to pull into
   /// type units.
   void addDwarfTypeUnitType(DwarfCompileUnit &CU, StringRef Identifier,
-                            DIE &Die, DICompositeType CTy);
+                            DIE &Die, const MDCompositeType *CTy);
 
   /// \brief Add a label so that arange data can be generated for it.
   void addArangeLabel(SymbolCU SCU) { ArangeLabels.push_back(SCU); }
index 2125751..83fbb79 100644 (file)
@@ -467,7 +467,7 @@ void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
   StringRef varName = DV.getName();
 
   if (Tag == dwarf::DW_TAG_pointer_type) {
-    DIDerivedType DTy = cast<MDDerivedType>(Ty);
+    auto *DTy = cast<MDDerivedType>(Ty);
     TmpTy = resolve(DTy->getBaseType());
     isPointer = true;
   }
@@ -475,11 +475,11 @@ void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
   // Find the __forwarding field and the variable field in the __Block_byref
   // struct.
   DIArray Fields = cast<MDCompositeTypeBase>(TmpTy)->getElements();
-  DIDerivedType varField;
-  DIDerivedType forwardingField;
+  const MDDerivedType *varField = nullptr;
+  const MDDerivedType *forwardingField = nullptr;
 
   for (unsigned i = 0, N = Fields.size(); i < N; ++i) {
-    DIDerivedType DT = cast<MDDerivedTypeBase>(Fields[i]);
+    auto *DT = cast<MDDerivedType>(Fields[i]);
     StringRef fieldName = DT->getName();
     if (fieldName == "__forwarding")
       forwardingField = DT;
@@ -535,7 +535,7 @@ void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
 
 /// Return true if type encoding is unsigned.
 static bool isUnsignedDIType(DwarfDebug *DD, const MDType *Ty) {
-  if (DIDerivedType DTy = dyn_cast<MDDerivedTypeBase>(Ty)) {
+  if (auto *DTy = dyn_cast<MDDerivedTypeBase>(Ty)) {
     dwarf::Tag T = (dwarf::Tag)Ty->getTag();
     // Encode pointer constants as unsigned bytes. This is used at least for
     // null pointer constant emission.
@@ -565,7 +565,7 @@ static bool isUnsignedDIType(DwarfDebug *DD, const MDType *Ty) {
     return false;
   }
 
-  DIBasicType BTy = cast<MDBasicType>(Ty);
+  auto *BTy = cast<MDBasicType>(Ty);
   unsigned Encoding = BTy->getEncoding();
   assert((Encoding == dwarf::DW_ATE_unsigned ||
           Encoding == dwarf::DW_ATE_unsigned_char ||
@@ -583,7 +583,7 @@ static bool isUnsignedDIType(DwarfDebug *DD, const MDType *Ty) {
 }
 
 /// If this type is derived from a base type then return base type size.
-static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
+static uint64_t getBaseTypeSize(DwarfDebug *DD, const MDDerivedType *Ty) {
   unsigned Tag = Ty->getTag();
 
   if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
@@ -602,7 +602,7 @@ static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
       BaseType->getTag() == dwarf::DW_TAG_rvalue_reference_type)
     return Ty->getSizeInBits();
 
-  if (auto *DT = dyn_cast<MDDerivedTypeBase>(BaseType))
+  if (auto *DT = dyn_cast<MDDerivedType>(BaseType))
     return getBaseTypeSize(DD, DT);
 
   return BaseType->getSizeInBits();
@@ -717,7 +717,7 @@ DIE *DwarfUnit::getOrCreateContextDIE(const MDScope *Context) {
   return getDIE(Context);
 }
 
-DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) {
+DIE *DwarfUnit::createTypeDIE(const MDCompositeType *Ty) {
   auto *Context = resolve(Ty->getScope());
   DIE *ContextDIE = getOrCreateContextDIE(Context);
 
@@ -853,7 +853,7 @@ std::string DwarfUnit::getParentContextString(const MDScope *Context) const {
   return CS;
 }
 
-void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
+void DwarfUnit::constructTypeDIE(DIE &Buffer, const MDBasicType *BTy) {
   // Get core information.
   StringRef Name = BTy->getName();
   // Add name if not anonymous or intermediate type.
@@ -871,7 +871,7 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
   addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
 }
 
-void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
+void DwarfUnit::constructTypeDIE(DIE &Buffer, const MDDerivedType *DTy) {
   // Get core information.
   StringRef Name = DTy->getName();
   uint64_t Size = DTy->getSizeInBits() >> 3;
@@ -967,7 +967,7 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const MDCompositeType *CTy) {
         continue;
       if (auto *SP = dyn_cast<MDSubprogram>(Element))
         getOrCreateSubprogramDIE(SP);
-      else if (DIDerivedType DDTy = dyn_cast<MDDerivedTypeBase>(Element)) {
+      else if (auto *DDTy = dyn_cast<MDDerivedType>(Element)) {
         if (DDTy->getTag() == dwarf::DW_TAG_friend) {
           DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
           addType(ElemDie, resolve(DDTy->getBaseType()), dwarf::DW_AT_friend);
@@ -1006,7 +1006,7 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const MDCompositeType *CTy) {
 
     // This is outside the DWARF spec, but GDB expects a DW_AT_containing_type
     // inside C++ composite types to point to the base class with the vtable.
-    if (DICompositeType ContainingType =
+    if (auto *ContainingType =
             dyn_cast_or_null<MDCompositeType>(resolve(CTy->getVTableHolder())))
       addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
                   *getOrCreateTypeDIE(ContainingType));
@@ -1208,7 +1208,7 @@ void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie,
        Language == dwarf::DW_LANG_ObjC))
     addFlag(SPDie, dwarf::DW_AT_prototyped);
 
-  DISubroutineType SPTy = SP->getType();
+  const MDSubroutineType *SPTy = SP->getType();
   assert(SPTy->getTag() == dwarf::DW_TAG_subroutine_type &&
          "the type of a subprogram should be a subroutine");
 
@@ -1303,7 +1303,7 @@ DIE *DwarfUnit::getIndexTyDie() {
   return IndexTyDie;
 }
 
-void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
+void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, const MDCompositeType *CTy) {
   if (CTy->isVector())
     addFlag(Buffer, dwarf::DW_AT_GNU_vector);
 
@@ -1325,7 +1325,7 @@ void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
   }
 }
 
-void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
+void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const MDCompositeType *CTy) {
   DIArray Elements = CTy->getElements();
 
   // Add enumerators to enumeration type.
@@ -1361,10 +1361,7 @@ void DwarfUnit::constructContainingTypeDIEs() {
   }
 }
 
-void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT_) {
-  // Downcast to MDDerivedType.
-  const MDDerivedType *DT = cast<MDDerivedType>(DT_);
-
+void DwarfUnit::constructMemberDIE(DIE &Buffer, const MDDerivedType *DT) {
   DIE &MemberDie = createAndAddDIE(DT->getTag(), Buffer);
   StringRef Name = DT->getName();
   if (!Name.empty())
@@ -1452,8 +1449,7 @@ void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT_) {
     addFlag(MemberDie, dwarf::DW_AT_artificial);
 }
 
-DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT_) {
-  const MDDerivedType *DT = cast_or_null<MDDerivedType>(DT_);
+DIE *DwarfUnit::getOrCreateStaticMemberDIE(const MDDerivedType *DT) {
   if (!DT)
     return nullptr;
 
index a92b30f..e8fd13e 100644 (file)
@@ -307,7 +307,7 @@ public:
   DIE *getOrCreateTypeDIE(const MDNode *N);
 
   /// \brief Get context owner's DIE.
-  DIE *createTypeDIE(DICompositeType Ty);
+  DIE *createTypeDIE(const MDCompositeType *Ty);
 
   /// \brief Get context owner's DIE.
   DIE *getOrCreateContextDIE(const MDScope *Context);
@@ -339,7 +339,7 @@ public:
 
 protected:
   /// \brief Create new static data member DIE.
-  DIE *getOrCreateStaticMemberDIE(DIDerivedType DT);
+  DIE *getOrCreateStaticMemberDIE(const MDDerivedType *DT);
 
   /// Look up the source ID with the given directory and source file names. If
   /// none currently exists, create a new ID and insert it in the line table.
@@ -352,13 +352,13 @@ protected:
   }
 
 private:
-  void constructTypeDIE(DIE &Buffer, DIBasicType BTy);
-  void constructTypeDIE(DIE &Buffer, DIDerivedType DTy);
+  void constructTypeDIE(DIE &Buffer, const MDBasicType *BTy);
+  void constructTypeDIE(DIE &Buffer, const MDDerivedType *DTy);
   void constructTypeDIE(DIE &Buffer, const MDSubroutineType *DTy);
   void constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy);
-  void constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy);
-  void constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy);
-  void constructMemberDIE(DIE &Buffer, DIDerivedType DT);
+  void constructArrayTypeDIE(DIE &Buffer, const MDCompositeType *CTy);
+  void constructEnumTypeDIE(DIE &Buffer, const MDCompositeType *CTy);
+  void constructMemberDIE(DIE &Buffer, const MDDerivedType *DT);
   void constructTemplateTypeParameterDIE(DIE &Buffer,
                                          DITemplateTypeParameter TP);
   void constructTemplateValueParameterDIE(DIE &Buffer,