Revert "Debug Info: Add basic support for external types references."

This reverts commit r242302. External type refs of this form were
never used by any LLVM frontend so this is effectively dead code.
(They were introduced to support clang module debug info, but in the
end we came up with a better design that doesn't use this feature at
all.)

rdar://problem/25897929

Differential Revision: https://reviews.llvm.org/D30917

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297684 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Adrian Prantl 2017-03-13 22:56:14 +00:00
parent f3ed5aafdd
commit 8c12617ac6
8 changed files with 3 additions and 89 deletions

View File

@ -440,13 +440,6 @@ namespace llvm {
DINode::DIFlags Flags = DINode::FlagZero, DINode::DIFlags Flags = DINode::FlagZero,
unsigned CC = 0); unsigned CC = 0);
/// Create an external type reference.
/// \param Tag Dwarf TAG.
/// \param File File in which the type is defined.
/// \param UniqueIdentifier A unique identifier for the type.
DICompositeType *createExternalTypeRef(unsigned Tag, DIFile *File,
StringRef UniqueIdentifier);
/// Create a new DIType* with "artificial" flag set. /// Create a new DIType* with "artificial" flag set.
DIType *createArtificialType(DIType *Ty); DIType *createArtificialType(DIType *Ty);

View File

@ -34,7 +34,8 @@ HANDLE_DI_FLAG((1 << 11), Vector)
HANDLE_DI_FLAG((1 << 12), StaticMember) HANDLE_DI_FLAG((1 << 12), StaticMember)
HANDLE_DI_FLAG((1 << 13), LValueReference) HANDLE_DI_FLAG((1 << 13), LValueReference)
HANDLE_DI_FLAG((1 << 14), RValueReference) HANDLE_DI_FLAG((1 << 14), RValueReference)
HANDLE_DI_FLAG((1 << 15), ExternalTypeRef) // 15 was formerly ExternalTypeRef, but this was never used.
HANDLE_DI_FLAG((1 << 15), Reserved)
HANDLE_DI_FLAG((1 << 16), SingleInheritance) HANDLE_DI_FLAG((1 << 16), SingleInheritance)
HANDLE_DI_FLAG((2 << 16), MultipleInheritance) HANDLE_DI_FLAG((2 << 16), MultipleInheritance)
HANDLE_DI_FLAG((3 << 16), VirtualInheritance) HANDLE_DI_FLAG((3 << 16), VirtualInheritance)

View File

@ -629,7 +629,6 @@ public:
bool isStaticMember() const { return getFlags() & FlagStaticMember; } bool isStaticMember() const { return getFlags() & FlagStaticMember; }
bool isLValueReference() const { return getFlags() & FlagLValueReference; } bool isLValueReference() const { return getFlags() & FlagLValueReference; }
bool isRValueReference() const { return getFlags() & FlagRValueReference; } bool isRValueReference() const { return getFlags() & FlagRValueReference; }
bool isExternalTypeRef() const { return getFlags() & FlagExternalTypeRef; }
static bool classof(const Metadata *MD) { static bool classof(const Metadata *MD) {
switch (MD->getMetadataID()) { switch (MD->getMetadataID()) {

View File

@ -544,7 +544,6 @@ void DwarfDebug::beginModule() {
// The retained types array by design contains pointers to // The retained types array by design contains pointers to
// MDNodes rather than DIRefs. Unique them here. // MDNodes rather than DIRefs. Unique them here.
if (DIType *RT = dyn_cast<DIType>(Ty)) if (DIType *RT = dyn_cast<DIType>(Ty))
if (!RT->isExternalTypeRef())
// There is no point in force-emitting a forward declaration. // There is no point in force-emitting a forward declaration.
CU.getOrCreateTypeDIE(RT); CU.getOrCreateTypeDIE(RT);
} }

View File

@ -297,13 +297,6 @@ void DwarfUnit::addDIETypeSignature(DIE &Die, uint64_t Signature) {
dwarf::DW_FORM_ref_sig8, DIEInteger(Signature)); dwarf::DW_FORM_ref_sig8, DIEInteger(Signature));
} }
void DwarfUnit::addDIETypeSignature(DIE &Die, dwarf::Attribute Attribute,
StringRef Identifier) {
uint64_t Signature = DD->makeTypeSignature(Identifier);
Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_ref_sig8,
DIEInteger(Signature));
}
void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
DIEEntry Entry) { DIEEntry Entry) {
const DIEUnit *CU = Die.getUnit(); const DIEUnit *CU = Die.getUnit();
@ -696,8 +689,7 @@ DIE *DwarfTypeUnit::createTypeDIE(const DICompositeType *Ty) {
constructTypeDIE(TyDIE, cast<DICompositeType>(Ty)); constructTypeDIE(TyDIE, cast<DICompositeType>(Ty));
if (!Ty->isExternalTypeRef()) updateAcceleratorTables(Context, Ty, TyDIE);
updateAcceleratorTables(Context, Ty, TyDIE);
return &TyDIE; return &TyDIE;
} }
@ -911,13 +903,6 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const DISubroutineType *CTy) {
} }
void DwarfUnit::constructTypeDIE(DIE &Buffer, const DICompositeType *CTy) { void DwarfUnit::constructTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
if (CTy->isExternalTypeRef()) {
StringRef Identifier = CTy->getIdentifier();
assert(!Identifier.empty() && "external type ref without identifier");
addFlag(Buffer, dwarf::DW_AT_declaration);
return addDIETypeSignature(Buffer, dwarf::DW_AT_signature, Identifier);
}
// Add name if not anonymous or intermediate type. // Add name if not anonymous or intermediate type.
StringRef Name = CTy->getName(); StringRef Name = CTy->getName();

View File

@ -198,9 +198,6 @@ public:
/// Add a type's DW_AT_signature and set the declaration flag. /// Add a type's DW_AT_signature and set the declaration flag.
void addDIETypeSignature(DIE &Die, uint64_t Signature); void addDIETypeSignature(DIE &Die, uint64_t Signature);
/// Add an attribute containing the type signature for a unique identifier.
void addDIETypeSignature(DIE &Die, dwarf::Attribute Attribute,
StringRef Identifier);
/// Add block data. /// Add block data.
void addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Block); void addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Block);

View File

@ -449,14 +449,6 @@ DISubroutineType *DIBuilder::createSubroutineType(DITypeRefArray ParameterTypes,
return DISubroutineType::get(VMContext, Flags, CC, ParameterTypes); return DISubroutineType::get(VMContext, Flags, CC, ParameterTypes);
} }
DICompositeType *DIBuilder::createExternalTypeRef(unsigned Tag, DIFile *File,
StringRef UniqueIdentifier) {
assert(!UniqueIdentifier.empty() && "external type ref without uid");
return DICompositeType::get(VMContext, Tag, "", nullptr, 0, nullptr, nullptr,
0, 0, 0, DINode::FlagExternalTypeRef, nullptr, 0,
nullptr, nullptr, UniqueIdentifier);
}
DICompositeType *DIBuilder::createEnumerationType( DICompositeType *DIBuilder::createEnumerationType(
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements, uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements,

View File

@ -1,52 +0,0 @@
; REQUIRES: object-emission
; RUN: %llc_dwarf -filetype=obj -O0 < %s | llvm-dwarfdump -debug-dump=info - | FileCheck %s
; Manually derived by externalizing the composite types from:
;
; namespace N { class B; }
; using N::B;
; class A;
; A *a;
;
; Test the direct use of an external type.
; CHECK: DW_TAG_variable
; CHECK: DW_AT_type [DW_FORM_ref4] {{.*}}{[[PTR:.*]]}
; CHECK: [[PTR]]: DW_TAG_pointer_type
; CHECK: DW_AT_type [DW_FORM_ref4] {{.*}}{[[A:.*]]}
; CHECK: [[A]]: DW_TAG_class_type
; CHECK: DW_AT_declaration [DW_FORM_flag] (0x01)
; CHECK: DW_AT_signature [DW_FORM_ref_sig8] (0x4e834ea939695c24)
; CHECK: [[B:.*]]: DW_TAG_class_type
; CHECK: DW_AT_declaration [DW_FORM_flag] (0x01)
; CHECK: DW_AT_signature [DW_FORM_ref_sig8] (0x942e51c7addda5f7)
; CHECK: DW_TAG_imported_declaration
; CHECK: DW_AT_import [DW_FORM_ref4] {{.*}}[[B]]
source_filename = "test/DebugInfo/X86/externaltyperef.ll"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.10.0"
%class.A = type opaque
@a = global %class.A* null, align 8, !dbg !0
!llvm.dbg.cu = !{!2}
!llvm.module.flags = !{!12, !13, !14}
!llvm.ident = !{!15}
!0 = !DIGlobalVariableExpression(var: !1)
!1 = !DIGlobalVariable(name: "a", scope: !2, file: !3, line: 2, type: !11, isLocal: false, isDefinition: true)
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 3.7.0 (trunk 242039) (llvm/trunk 242046)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !5, globals: !8, imports: !9)
!3 = !DIFile(filename: "test.cpp", directory: "/")
!4 = !{}
!5 = !{!6, !7}
!6 = !DICompositeType(tag: DW_TAG_class_type, name: "A", file: !3, flags: DIFlagExternalTypeRef, identifier: "_ZTS1A")
!7 = !DICompositeType(tag: DW_TAG_class_type, name: "A", file: !3, flags: DIFlagExternalTypeRef, identifier: "_ZTSN1N1BE")
!8 = !{!0}
!9 = !{!10}
!10 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !2, entity: !7, line: 4)
!11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)
!12 = !{i32 2, !"Dwarf Version", i32 2}
!13 = !{i32 2, !"Debug Info Version", i32 3}
!14 = !{i32 1, !"PIC Level", i32 2}
!15 = !{!"clang version 3.7.0 (trunk 242039) (llvm/trunk 242046)"}