From: Duncan P. N. Exon Smith Date: Mon, 20 Apr 2015 22:10:08 +0000 (+0000) Subject: DebugInfo: Delete subclasses of DIScope X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=d3c29ac587e8d4a1590a0b3c2efa5f1ce35e5c90 DebugInfo: Delete subclasses of DIScope Delete subclasses of (the already defunct) `DIScope`, updating users to use the raw pointers from the `Metadata` hierarchy directly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235356 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/bindings/go/llvm/DIBuilderBindings.cpp b/bindings/go/llvm/DIBuilderBindings.cpp index cd538e363a5..8d62a96d2f3 100644 --- a/bindings/go/llvm/DIBuilderBindings.cpp +++ b/bindings/go/llvm/DIBuilderBindings.cpp @@ -40,16 +40,14 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(LLVMDIBuilderRef Dref, int Optimized, const char *Flags, unsigned RuntimeVersion) { DIBuilder *D = unwrap(Dref); - DICompileUnit CU = D->createCompileUnit(Lang, File, Dir, Producer, Optimized, - Flags, RuntimeVersion); - return wrap(CU); + return wrap(D->createCompileUnit(Lang, File, Dir, Producer, Optimized, Flags, + RuntimeVersion)); } LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef Dref, const char *File, const char *Dir) { DIBuilder *D = unwrap(Dref); - DIFile F = D->createFile(File, Dir); - return wrap(F); + return wrap(D->createFile(File, Dir)); } LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(LLVMDIBuilderRef Dref, @@ -68,9 +66,8 @@ LLVMMetadataRef LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Dref, LLVMMetadataRef File, unsigned Discriminator) { DIBuilder *D = unwrap(Dref); - DILexicalBlockFile LBF = D->createLexicalBlockFile( - unwrap(Scope), unwrap(File), Discriminator); - return wrap(LBF); + return wrap(D->createLexicalBlockFile(unwrap(Scope), + unwrap(File), Discriminator)); } LLVMMetadataRef LLVMDIBuilderCreateFunction( @@ -79,12 +76,11 @@ LLVMMetadataRef LLVMDIBuilderCreateFunction( LLVMMetadataRef CompositeType, int IsLocalToUnit, int IsDefinition, unsigned ScopeLine, unsigned Flags, int IsOptimized, LLVMValueRef Func) { DIBuilder *D = unwrap(Dref); - DISubprogram SP = D->createFunction( - unwrap(Scope), Name, LinkageName, - File ? unwrap(File) : nullptr, Line, - unwrap(CompositeType), IsLocalToUnit, IsDefinition, - ScopeLine, Flags, IsOptimized, unwrap(Func)); - return wrap(SP); + return wrap(D->createFunction(unwrap(Scope), Name, LinkageName, + File ? unwrap(File) : nullptr, Line, + unwrap(CompositeType), + IsLocalToUnit, IsDefinition, ScopeLine, Flags, + IsOptimized, unwrap(Func))); } LLVMMetadataRef LLVMDIBuilderCreateLocalVariable( diff --git a/include/llvm/IR/DebugInfo.h b/include/llvm/IR/DebugInfo.h index 53c5e9ad120..d49239cd262 100644 --- a/include/llvm/IR/DebugInfo.h +++ b/include/llvm/IR/DebugInfo.h @@ -46,10 +46,6 @@ class NamedMDNode; class LLVMContext; class raw_ostream; -class DIFile; -class DISubprogram; -class DILexicalBlock; -class DILexicalBlockFile; class DIVariable; class DIObjCProperty; @@ -62,12 +58,6 @@ typedef DenseMap DITypeIdentifierMap; template <> struct simplify_type; DECLARE_SIMPLIFY_DESCRIPTOR(DISubrange) DECLARE_SIMPLIFY_DESCRIPTOR(DIEnumerator) -DECLARE_SIMPLIFY_DESCRIPTOR(DIFile) -DECLARE_SIMPLIFY_DESCRIPTOR(DICompileUnit) -DECLARE_SIMPLIFY_DESCRIPTOR(DISubprogram) -DECLARE_SIMPLIFY_DESCRIPTOR(DILexicalBlock) -DECLARE_SIMPLIFY_DESCRIPTOR(DILexicalBlockFile) -DECLARE_SIMPLIFY_DESCRIPTOR(DINameSpace) DECLARE_SIMPLIFY_DESCRIPTOR(DITemplateTypeParameter) DECLARE_SIMPLIFY_DESCRIPTOR(DITemplateValueParameter) DECLARE_SIMPLIFY_DESCRIPTOR(DIGlobalVariable) @@ -104,77 +94,6 @@ public: MDEnumerator &operator*() const { return *N; } }; -class DIFile { - MDFile *N; - -public: - DIFile(const MDFile *N = nullptr) : N(const_cast(N)) {} - - operator MDFile *() const { return N; } - MDFile *operator->() const { return N; } - MDFile &operator*() const { return *N; } -}; - -class DICompileUnit { - MDCompileUnit *N; - -public: - DICompileUnit(const MDCompileUnit *N = nullptr) - : N(const_cast(N)) {} - - operator MDCompileUnit *() const { return N; } - MDCompileUnit *operator->() const { return N; } - MDCompileUnit &operator*() const { return *N; } -}; - -class DISubprogram { - MDSubprogram *N; - -public: - DISubprogram(const MDSubprogram *N = nullptr) - : N(const_cast(N)) {} - - operator MDSubprogram *() const { return N; } - MDSubprogram *operator->() const { return N; } - MDSubprogram &operator*() const { return *N; } -}; - -class DILexicalBlock { - MDLexicalBlockBase *N; - -public: - DILexicalBlock(const MDLexicalBlockBase *N = nullptr) - : N(const_cast(N)) {} - - operator MDLexicalBlockBase *() const { return N; } - MDLexicalBlockBase *operator->() const { return N; } - MDLexicalBlockBase &operator*() const { return *N; } -}; - -class DILexicalBlockFile { - MDLexicalBlockFile *N; - -public: - DILexicalBlockFile(const MDLexicalBlockFile *N = nullptr) - : N(const_cast(N)) {} - - operator MDLexicalBlockFile *() const { return N; } - MDLexicalBlockFile *operator->() const { return N; } - MDLexicalBlockFile &operator*() const { return *N; } -}; - -class DINameSpace { - MDNamespace *N; - -public: - DINameSpace(const MDNamespace *N = nullptr) - : N(const_cast(N)) {} - - operator MDNamespace *() const { return N; } - MDNamespace *operator->() const { return N; } - MDNamespace &operator*() const { return *N; } -}; - class DITemplateTypeParameter { MDTemplateTypeParameter *N; @@ -278,12 +197,6 @@ public: template <> struct simplify_type : simplify_type {}; SIMPLIFY_DESCRIPTOR(DISubrange) SIMPLIFY_DESCRIPTOR(DIEnumerator) -SIMPLIFY_DESCRIPTOR(DIFile) -SIMPLIFY_DESCRIPTOR(DICompileUnit) -SIMPLIFY_DESCRIPTOR(DISubprogram) -SIMPLIFY_DESCRIPTOR(DILexicalBlock) -SIMPLIFY_DESCRIPTOR(DILexicalBlockFile) -SIMPLIFY_DESCRIPTOR(DINameSpace) SIMPLIFY_DESCRIPTOR(DITemplateTypeParameter) SIMPLIFY_DESCRIPTOR(DITemplateValueParameter) SIMPLIFY_DESCRIPTOR(DIGlobalVariable) @@ -298,8 +211,8 @@ SIMPLIFY_DESCRIPTOR(DIImportedEntity) MDSubprogram *getDISubprogram(const MDNode *Scope); /// \brief Find debug info for a given function. -/// \returns a valid DISubprogram, if found. Otherwise, it returns an empty -/// DISubprogram. +/// +/// \returns a valid subprogram, if found. Otherwise, return \c nullptr. MDSubprogram *getDISubprogram(const Function *F); /// \brief Find underlying composite type. diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 0fd25eb1a53..3f22070acea 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -16,7 +16,7 @@ namespace llvm { -DwarfCompileUnit::DwarfCompileUnit(unsigned UID, DICompileUnit Node, +DwarfCompileUnit::DwarfCompileUnit(unsigned UID, const MDCompileUnit *Node, AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU) : DwarfUnit(UID, dwarf::DW_TAG_compile_unit, Node, A, DW, DWU), @@ -276,7 +276,7 @@ void DwarfCompileUnit::attachLowHighPC(DIE &D, const MCSymbol *Begin, // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc // and DW_AT_high_pc attributes. If there are global variables in this // scope then create and insert DIEs for these variables. -DIE &DwarfCompileUnit::updateSubprogramScopeDIE(DISubprogram SP) { +DIE &DwarfCompileUnit::updateSubprogramScopeDIE(const MDSubprogram *SP) { DIE *SPDie = getOrCreateSubprogramDIE(SP, includeMinimalInlineScopes()); attachLowHighPC(*SPDie, Asm->getFunctionBegin(), Asm->getFunctionEnd()); @@ -562,7 +562,7 @@ void DwarfCompileUnit::constructSubprogramScopeDIE(LexicalScope *Scope) { assert(Scope && Scope->getScopeNode()); assert(!Scope->getInlinedAt()); assert(!Scope->isAbstractScope()); - DISubprogram Sub = cast(Scope->getScopeNode()); + auto *Sub = cast(Scope->getScopeNode()); DD->getProcessedSPNodes().insert(Sub); @@ -604,7 +604,7 @@ DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) { if (AbsDef) return; - DISubprogram SP = cast(Scope->getScopeNode()); + auto *SP = cast(Scope->getScopeNode()); DIE *ContextDIE; @@ -658,7 +658,7 @@ DwarfCompileUnit::constructImportedEntityDIE(const DIImportedEntity &Module) { return IMDie; } -void DwarfCompileUnit::finishSubprogramDefinition(DISubprogram SP) { +void DwarfCompileUnit::finishSubprogramDefinition(const MDSubprogram *SP) { DIE *D = getDIE(SP); if (DIE *AbsSPDIE = DU->getAbstractSPDies().lookup(SP)) { if (D) @@ -675,7 +675,7 @@ void DwarfCompileUnit::finishSubprogramDefinition(DISubprogram SP) { applySubprogramAttributesToDefinition(SP, *D); } } -void DwarfCompileUnit::collectDeadVariables(DISubprogram SP) { +void DwarfCompileUnit::collectDeadVariables(const MDSubprogram *SP) { assert(SP && "CU's subprogram list contains a non-subprogram"); assert(SP->isDefinition() && "CU's subprogram list contains a subprogram declaration"); @@ -805,8 +805,8 @@ void DwarfCompileUnit::addExpr(DIELoc &Die, dwarf::Form Form, Die.addValue((dwarf::Attribute)0, Form, Value); } -void DwarfCompileUnit::applySubprogramAttributesToDefinition(DISubprogram SP, - DIE &SPDie) { +void DwarfCompileUnit::applySubprogramAttributesToDefinition( + const MDSubprogram *SP, DIE &SPDie) { auto *SPDecl = SP->getDeclaration(); auto *Context = resolve(SPDecl ? SPDecl->getScope() : SP->getScope()); applySubprogramAttributes(SP, SPDie, includeMinimalInlineScopes()); diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h index f197d226f9c..6ea43c3f615 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h @@ -66,7 +66,7 @@ class DwarfCompileUnit : public DwarfUnit { bool includeMinimalInlineScopes() const; public: - DwarfCompileUnit(unsigned UID, DICompileUnit Node, AsmPrinter *A, + DwarfCompileUnit(unsigned UID, const MDCompileUnit *Node, AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU); DwarfCompileUnit *getSkeleton() const { @@ -113,7 +113,7 @@ public: /// DW_AT_low_pc and DW_AT_high_pc attributes. If there are global /// variables in this scope then create and insert DIEs for these /// variables. - DIE &updateSubprogramScopeDIE(DISubprogram SP); + DIE &updateSubprogramScopeDIE(const MDSubprogram *SP); void constructScopeDIE(LexicalScope *Scope, SmallVectorImpl> &FinalChildren); @@ -158,9 +158,9 @@ public: std::unique_ptr constructImportedEntityDIE(const DIImportedEntity &Module); - void finishSubprogramDefinition(DISubprogram SP); + void finishSubprogramDefinition(const MDSubprogram *SP); - void collectDeadVariables(DISubprogram SP); + void collectDeadVariables(const MDSubprogram *SP); /// Set the skeleton unit associated with this unit. void setSkeleton(DwarfCompileUnit &Skel) { Skeleton = &Skel; } @@ -215,7 +215,8 @@ public: /// Add a Dwarf expression attribute data and value. void addExpr(DIELoc &Die, dwarf::Form Form, const MCExpr *Expr); - void applySubprogramAttributesToDefinition(DISubprogram SP, DIE &SPDie); + void applySubprogramAttributesToDefinition(const MDSubprogram *SP, + DIE &SPDie); /// getRangeLists - Get the vector of range lists. const SmallVectorImpl &getRangeLists() const { diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index b2a2220a58f..8226e1fe9aa 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -277,7 +277,7 @@ static StringRef getObjCMethodName(StringRef In) { // TODO: Determine whether or not we should add names for programs // that do not have a DW_AT_name or DW_AT_linkage_name field - this // is only slightly different than the lookup of non-standard ObjC names. -void DwarfDebug::addSubprogramNames(DISubprogram SP, DIE &Die) { +void DwarfDebug::addSubprogramNames(const MDSubprogram *SP, DIE &Die) { if (!SP->isDefinition()) return; addAccelName(SP->getName(), Die); @@ -363,7 +363,8 @@ void DwarfDebug::addGnuPubAttributes(DwarfUnit &U, DIE &D) const { // Create new DwarfCompileUnit for the given metadata node with tag // DW_TAG_compile_unit. -DwarfCompileUnit &DwarfDebug::constructDwarfCompileUnit(DICompileUnit DIUnit) { +DwarfCompileUnit & +DwarfDebug::constructDwarfCompileUnit(const MDCompileUnit *DIUnit) { StringRef FN = DIUnit->getFilename(); CompilationDir = DIUnit->getDirectory(); @@ -446,7 +447,7 @@ void DwarfDebug::beginModule() { SingleCU = CU_Nodes->getNumOperands() == 1; for (MDNode *N : CU_Nodes->operands()) { - DICompileUnit CUNode = cast(N); + auto *CUNode = cast(N); DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode); for (auto *IE : CUNode->getImportedEntities()) ScopesWithImportedEntities.push_back(std::make_pair(IE->getScope(), IE)); @@ -512,7 +513,7 @@ void DwarfDebug::collectDeadVariables() { if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) { for (MDNode *N : CU_Nodes->operands()) { - DICompileUnit TheCU = cast(N); + auto *TheCU = cast(N); // Construct subprogram DIE and add variables DIEs. DwarfCompileUnit *SPCU = static_cast(CUMap.lookup(TheCU)); @@ -872,7 +873,8 @@ DwarfDebug::buildLocationList(SmallVectorImpl &DebugLoc, // Find variables for each lexical scope. -void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP, +void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, + const MDSubprogram *SP, DenseSet &Processed) { // Grab the variable info that was squirreled away in the MMI side-table. collectVariableInfoFromMMITable(Processed); @@ -1185,7 +1187,7 @@ void DwarfDebug::endFunction(const MachineFunction *MF) { Asm->OutStreamer.getContext().setDwarfCompileUnitID(0); LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); - DISubprogram SP = cast(FnScope->getScopeNode()); + auto *SP = cast(FnScope->getScopeNode()); DwarfCompileUnit &TheCU = *SPMap.lookup(SP); DenseSet ProcessedVars; @@ -1215,7 +1217,7 @@ void DwarfDebug::endFunction(const MachineFunction *MF) { #endif // Construct abstract scopes. for (LexicalScope *AScope : LScopes.getAbstractScopesList()) { - DISubprogram SP = cast(AScope->getScopeNode()); + auto *SP = cast(AScope->getScopeNode()); // Collect info for variables that were optimized out. for (DIVariable DV : SP->getVariables()) { if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index ef971124dea..c33a07b0b42 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -451,7 +451,7 @@ class DwarfDebug : public AsmPrinterHandler { /// \brief Create new DwarfCompileUnit for the given metadata node with tag /// DW_TAG_compile_unit. - DwarfCompileUnit &constructDwarfCompileUnit(DICompileUnit DIUnit); + DwarfCompileUnit &constructDwarfCompileUnit(const MDCompileUnit *DIUnit); /// \brief Construct imported_module or imported_declaration DIE. void constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU, @@ -468,7 +468,7 @@ class DwarfDebug : public AsmPrinterHandler { void identifyScopeMarkers(); /// \brief Populate LexicalScope entries with variables' info. - void collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP, + void collectVariableInfo(DwarfCompileUnit &TheCU, const MDSubprogram *SP, DenseSet &ProcessedVars); /// \brief Build the location list for all DBG_VALUEs in the @@ -581,7 +581,7 @@ public: /// or another context nested inside a subprogram. bool isSubprogramContext(const MDNode *Context); - void addSubprogramNames(DISubprogram SP, DIE &Die); + void addSubprogramNames(const MDSubprogram *SP, DIE &Die); AddressPool &getAddressPool() { return AddrPool; } diff --git a/lib/CodeGen/AsmPrinter/DwarfFile.h b/lib/CodeGen/AsmPrinter/DwarfFile.h index c9de6665b01..19bb3471b08 100644 --- a/lib/CodeGen/AsmPrinter/DwarfFile.h +++ b/lib/CodeGen/AsmPrinter/DwarfFile.h @@ -28,7 +28,6 @@ class DwarfUnit; class DIEAbbrev; class MCSymbol; class DIE; -class DISubprogram; class LexicalScope; class StringRef; class DwarfDebug; diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 83fbb79979d..750b8525695 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -63,9 +63,9 @@ bool DIEDwarfExpression::isFrameRegister(unsigned MachineReg) { return MachineReg == TRI.getFrameRegister(*AP.MF); } - -DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node, - AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU) +DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, + const MDCompileUnit *Node, AsmPrinter *A, DwarfDebug *DW, + DwarfFile *DWU) : UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A), DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr) { assert(UnitTag == dwarf::DW_TAG_compile_unit || @@ -367,7 +367,7 @@ void DwarfUnit::addSourceLine(DIE &Die, DIGlobalVariable G) { addSourceLine(Die, G->getLine(), G->getFilename(), G->getDirectory()); } -void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) { +void DwarfUnit::addSourceLine(DIE &Die, const MDSubprogram *SP) { assert(SP); addSourceLine(Die, SP->getLine(), SP->getFilename(), SP->getDirectory()); @@ -385,7 +385,7 @@ void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) { addSourceLine(Die, Ty->getLine(), Ty->getFilename(), Ty->getDirectory()); } -void DwarfUnit::addSourceLine(DIE &Die, DINameSpace NS) { +void DwarfUnit::addSourceLine(DIE &Die, const MDNamespace *NS) { addSourceLine(Die, NS->getLine(), NS->getFilename(), NS->getDirectory()); } @@ -1101,7 +1101,7 @@ DwarfUnit::constructTemplateValueParameterDIE(DIE &Buffer, } } -DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) { +DIE *DwarfUnit::getOrCreateNameSpace(const MDNamespace *NS) { // Construct the context before querying for the existence of the DIE in case // such construction creates the DIE. DIE *ContextDIE = getOrCreateContextDIE(NS->getScope()); @@ -1121,7 +1121,7 @@ DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) { return &NDie; } -DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP, bool Minimal) { +DIE *DwarfUnit::getOrCreateSubprogramDIE(const MDSubprogram *SP, bool Minimal) { // Construct the context before querying for the existence of the DIE in case // such construction creates the DIE (as is the case for member function // declarations). @@ -1152,7 +1152,7 @@ DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP, bool Minimal) { return &SPDie; } -bool DwarfUnit::applySubprogramDefinitionAttributes(DISubprogram SP, +bool DwarfUnit::applySubprogramDefinitionAttributes(const MDSubprogram *SP, DIE &SPDie) { DIE *DeclDie = nullptr; StringRef DeclLinkageName; @@ -1184,7 +1184,7 @@ bool DwarfUnit::applySubprogramDefinitionAttributes(DISubprogram SP, return true; } -void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie, +void DwarfUnit::applySubprogramAttributes(const MDSubprogram *SP, DIE &SPDie, bool Minimal) { if (!Minimal) if (applySubprogramDefinitionAttributes(SP, SPDie)) diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index e8fd13e574a..a236a4a7a97 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -71,7 +71,7 @@ protected: unsigned UniqueID; /// MDNode for the compile unit. - DICompileUnit CUNode; + const MDCompileUnit *CUNode; /// Unit debug information entry. DIE UnitDie; @@ -117,7 +117,7 @@ protected: /// The section this unit will be emitted in. const MCSection *Section; - DwarfUnit(unsigned UID, dwarf::Tag, DICompileUnit CU, AsmPrinter *A, + DwarfUnit(unsigned UID, dwarf::Tag, const MDCompileUnit *CU, AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU); /// \brief Add a string attribute data and value. @@ -127,7 +127,7 @@ protected: void addIndexedString(DIE &Die, dwarf::Attribute Attribute, StringRef Str); - bool applySubprogramDefinitionAttributes(DISubprogram SP, DIE &SPDie); + bool applySubprogramDefinitionAttributes(const MDSubprogram *SP, DIE &SPDie); public: virtual ~DwarfUnit(); @@ -143,7 +143,7 @@ public: AsmPrinter* getAsmPrinter() const { return Asm; } unsigned getUniqueID() const { return UniqueID; } uint16_t getLanguage() const { return CUNode->getSourceLanguage(); } - DICompileUnit getCUNode() const { return CUNode; } + const MDCompileUnit *getCUNode() const { return CUNode; } DIE &getUnitDie() { return UnitDie; } unsigned getDebugInfoOffset() const { return DebugInfoOffset; } @@ -248,9 +248,9 @@ public: StringRef Directory); void addSourceLine(DIE &Die, DIVariable V); void addSourceLine(DIE &Die, DIGlobalVariable G); - void addSourceLine(DIE &Die, DISubprogram SP); + void addSourceLine(DIE &Die, const MDSubprogram *SP); void addSourceLine(DIE &Die, const MDType *Ty); - void addSourceLine(DIE &Die, DINameSpace NS); + void addSourceLine(DIE &Die, const MDNamespace *NS); void addSourceLine(DIE &Die, DIObjCProperty Ty); /// \brief Add constant value entry in variable DIE. @@ -297,10 +297,10 @@ public: void addType(DIE &Entity, const MDType *Ty, dwarf::Attribute Attribute = dwarf::DW_AT_type); - DIE *getOrCreateNameSpace(DINameSpace NS); - DIE *getOrCreateSubprogramDIE(DISubprogram SP, bool Minimal = false); + DIE *getOrCreateNameSpace(const MDNamespace *NS); + DIE *getOrCreateSubprogramDIE(const MDSubprogram *SP, bool Minimal = false); - void applySubprogramAttributes(DISubprogram SP, DIE &SPDie, + void applySubprogramAttributes(const MDSubprogram *SP, DIE &SPDie, bool Minimal = false); /// \brief Find existing DIE or create new DIE for the given type. diff --git a/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp b/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp index 276e7dfb2eb..a8f17c6e81f 100644 --- a/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp +++ b/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp @@ -191,7 +191,7 @@ void WinCodeViewLineTables::emitDebugInfoForFunction(const Function *GV) { StringRef GVName = GV->getName(); StringRef FuncName; - if (DISubprogram SP = getDISubprogram(GV)) + if (auto *SP = getDISubprogram(GV)) FuncName = SP->getDisplayName(); // FIXME Clang currently sets DisplayName to "bar" for a C++ diff --git a/lib/IR/DebugLoc.cpp b/lib/IR/DebugLoc.cpp index 4cf7e9e34e1..2d00c983311 100644 --- a/lib/IR/DebugLoc.cpp +++ b/lib/IR/DebugLoc.cpp @@ -50,7 +50,7 @@ MDNode *DebugLoc::getInlinedAtScope() const { DebugLoc DebugLoc::getFnDebugLoc() const { // FIXME: Add a method on \a MDLocation that does this work. const MDNode *Scope = getInlinedAtScope(); - if (DISubprogram SP = getDISubprogram(Scope)) + if (auto *SP = getDISubprogram(Scope)) return DebugLoc::get(SP->getScopeLine(), 0, SP); return DebugLoc(); diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 03ab9fbd83c..1e0c5e9858e 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -1269,7 +1269,7 @@ void ModuleLinker::stripReplacedSubprograms() { if (!CompileUnits) return; for (unsigned I = 0, E = CompileUnits->getNumOperands(); I != E; ++I) { - DICompileUnit CU = cast(CompileUnits->getOperand(I)); + auto *CU = cast(CompileUnits->getOperand(I)); assert(CU && "Expected valid compile unit"); for (MDSubprogram *SP : CU->getSubprograms()) { diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index 917a1632f6a..eee5a6a284c 100644 --- a/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -705,7 +705,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F, // Patch the pointer to LLVM function in debug info descriptor. auto DI = FunctionDIs.find(F); if (DI != FunctionDIs.end()) { - DISubprogram SP = DI->second; + MDSubprogram *SP = DI->second; SP->replaceFunction(NF); // Ensure the map is updated so it can be reused on subsequent argument // promotions of the same function. diff --git a/lib/Transforms/IPO/DeadArgumentElimination.cpp b/lib/Transforms/IPO/DeadArgumentElimination.cpp index e347070a8f9..83dab6d33da 100644 --- a/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -303,7 +303,7 @@ bool DAE::DeleteDeadVarargs(Function &Fn) { // Patch the pointer to LLVM function in debug info descriptor. auto DI = FunctionDIs.find(&Fn); if (DI != FunctionDIs.end()) { - DISubprogram SP = DI->second; + MDSubprogram *SP = DI->second; SP->replaceFunction(NF); // Ensure the map is updated so it can be reused on non-varargs argument // eliminations of the same function. diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index ad7c5a08765..ef43dd2d37b 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -307,11 +307,8 @@ bool StripDeadDebugInfo::runOnModule(Module &M) { for (MDCompileUnit *DIC : F.compile_units()) { // Create our live subprogram list. - MDSubprogramArray SPs = DIC->getSubprograms(); bool SubprogramChange = false; - for (unsigned i = 0, e = SPs.size(); i != e; ++i) { - DISubprogram DISP = SPs[i]; - + for (MDSubprogram *DISP : DIC->getSubprograms()) { // Make sure we visit each subprogram only once. if (!VisitedSet.insert(DISP).second) continue; diff --git a/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/lib/Transforms/Instrumentation/GCOVProfiling.cpp index 368a81d7aba..292d869718e 100644 --- a/lib/Transforms/Instrumentation/GCOVProfiling.cpp +++ b/lib/Transforms/Instrumentation/GCOVProfiling.cpp @@ -126,7 +126,7 @@ namespace { Function *insertFlush(ArrayRef >); void insertIndirectCounterIncrement(); - std::string mangleName(DICompileUnit CU, const char *NewStem); + std::string mangleName(const MDCompileUnit *CU, const char *NewStem); GCOVOptions Options; @@ -149,7 +149,7 @@ ModulePass *llvm::createGCOVProfilerPass(const GCOVOptions &Options) { return new GCOVProfiler(Options); } -static StringRef getFunctionName(MDSubprogram *SP) { +static StringRef getFunctionName(const MDSubprogram *SP) { if (!SP->getLinkageName().empty()) return SP->getLinkageName(); return SP->getName(); @@ -309,7 +309,7 @@ namespace { // object users can construct, the blocks and lines will be rooted here. class GCOVFunction : public GCOVRecord { public: - GCOVFunction(DISubprogram SP, raw_ostream *os, uint32_t Ident, + GCOVFunction(const MDSubprogram *SP, raw_ostream *os, uint32_t Ident, bool UseCfgChecksum, bool ExitBlockBeforeBody) : SP(SP), Ident(Ident), UseCfgChecksum(UseCfgChecksum), CfgChecksum(0), ReturnBlock(1, os) { @@ -411,7 +411,7 @@ namespace { } private: - DISubprogram SP; + const MDSubprogram *SP; uint32_t Ident; uint32_t FuncChecksum; bool UseCfgChecksum; @@ -421,7 +421,8 @@ namespace { }; } -std::string GCOVProfiler::mangleName(DICompileUnit CU, const char *NewStem) { +std::string GCOVProfiler::mangleName(const MDCompileUnit *CU, + const char *NewStem) { if (NamedMDNode *GCov = M->getNamedMetadata("llvm.gcov")) { for (int i = 0, e = GCov->getNumOperands(); i != e; ++i) { MDNode *N = GCov->getOperand(i); @@ -487,7 +488,7 @@ void GCOVProfiler::emitProfileNotes() { // this pass over the original .o's as they're produced, or run it after // LTO, we'll generate the same .gcno files. - DICompileUnit CU = cast(CU_Nodes->getOperand(i)); + auto *CU = cast(CU_Nodes->getOperand(i)); std::error_code EC; raw_fd_ostream out(mangleName(CU, "gcno"), EC, sys::fs::F_None); std::string EdgeDestinations; @@ -570,7 +571,7 @@ bool GCOVProfiler::emitProfileArcs() { bool Result = false; bool InsertIndCounterIncrCode = false; for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) { - DICompileUnit CU = cast(CU_Nodes->getOperand(i)); + auto *CU = cast(CU_Nodes->getOperand(i)); SmallVector, 8> CountersBySP; for (auto *SP : CU->getSubprograms()) { Function *F = SP->getFunction(); @@ -846,7 +847,7 @@ Function *GCOVProfiler::insertCounterWriteout( NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu"); if (CU_Nodes) { for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) { - DICompileUnit CU = cast(CU_Nodes->getOperand(i)); + auto *CU = cast(CU_Nodes->getOperand(i)); std::string FilenameGcda = mangleName(CU, "gcda"); uint32_t CfgChecksum = FileChecksums.empty() ? 0 : FileChecksums[i]; Builder.CreateCall3(StartFile, diff --git a/lib/Transforms/Utils/AddDiscriminators.cpp b/lib/Transforms/Utils/AddDiscriminators.cpp index c1cd39abea7..dd88f3d0a26 100644 --- a/lib/Transforms/Utils/AddDiscriminators.cpp +++ b/lib/Transforms/Utils/AddDiscriminators.cpp @@ -194,7 +194,7 @@ bool AddDiscriminators::runOnFunction(Function &F) { // number for it. StringRef Filename = FirstDIL->getFilename(); auto *Scope = FirstDIL->getScope(); - DIFile File = Builder.createFile(Filename, Scope->getDirectory()); + auto *File = Builder.createFile(Filename, Scope->getDirectory()); // FIXME: Calculate the discriminator here, based on local information, // and delete MDLocation::computeNewDiscriminator(). The current @@ -202,7 +202,7 @@ bool AddDiscriminators::runOnFunction(Function &F) { // same context. All we really need is to discriminate between // FirstDIL and LastDIL -- a local map would suffice. unsigned Discriminator = FirstDIL->computeNewDiscriminator(); - DILexicalBlockFile NewScope = + auto *NewScope = Builder.createLexicalBlockFile(Scope, File, Discriminator); auto *NewDIL = MDLocation::get(Ctx, FirstDIL->getLine(), FirstDIL->getColumn(), diff --git a/lib/Transforms/Utils/CloneFunction.cpp b/lib/Transforms/Utils/CloneFunction.cpp index f200b588194..a9f476a669e 100644 --- a/lib/Transforms/Utils/CloneFunction.cpp +++ b/lib/Transforms/Utils/CloneFunction.cpp @@ -154,9 +154,10 @@ void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc, TypeMapper, Materializer); } -// Find the MDNode which corresponds to the DISubprogram data that described F. -static MDNode* FindSubprogram(const Function *F, DebugInfoFinder &Finder) { - for (DISubprogram Subprogram : Finder.subprograms()) { +// Find the MDNode which corresponds to the subprogram data that described F. +static MDSubprogram *FindSubprogram(const Function *F, + DebugInfoFinder &Finder) { + for (MDSubprogram *Subprogram : Finder.subprograms()) { if (Subprogram->describes(F)) return Subprogram; } @@ -165,7 +166,8 @@ static MDNode* FindSubprogram(const Function *F, DebugInfoFinder &Finder) { // Add an operand to an existing MDNode. The new operand will be added at the // back of the operand list. -static void AddOperand(DICompileUnit CU, MDSubprogramArray SPs, Metadata *NewSP) { +static void AddOperand(MDCompileUnit *CU, MDSubprogramArray SPs, + Metadata *NewSP) { SmallVector NewSPs; NewSPs.reserve(SPs.size() + 1); for (auto *SP : SPs) @@ -181,16 +183,16 @@ static void CloneDebugInfoMetadata(Function *NewFunc, const Function *OldFunc, DebugInfoFinder Finder; Finder.processModule(*OldFunc->getParent()); - const MDNode *OldSubprogramMDNode = FindSubprogram(OldFunc, Finder); + const MDSubprogram *OldSubprogramMDNode = FindSubprogram(OldFunc, Finder); if (!OldSubprogramMDNode) return; // Ensure that OldFunc appears in the map. // (if it's already there it must point to NewFunc anyway) VMap[OldFunc] = NewFunc; - DISubprogram NewSubprogram = + auto *NewSubprogram = cast(MapMetadata(OldSubprogramMDNode, VMap)); - for (DICompileUnit CU : Finder.compile_units()) { + for (auto *CU : Finder.compile_units()) { auto Subprograms = CU->getSubprograms(); // If the compile unit's function list contains the old function, it should // also contain the new one. diff --git a/unittests/Transforms/Utils/Cloning.cpp b/unittests/Transforms/Utils/Cloning.cpp index c0f25ab3b6f..d778903cbae 100644 --- a/unittests/Transforms/Utils/Cloning.cpp +++ b/unittests/Transforms/Utils/Cloning.cpp @@ -228,15 +228,16 @@ protected: IRBuilder<> IBuilder(C); // Function DI - DIFile File = DBuilder.createFile("filename.c", "/file/dir/"); + auto *File = DBuilder.createFile("filename.c", "/file/dir/"); DITypeArray ParamTypes = DBuilder.getOrCreateTypeArray(None); MDSubroutineType *FuncType = DBuilder.createSubroutineType(File, ParamTypes); - DICompileUnit CU = DBuilder.createCompileUnit(dwarf::DW_LANG_C99, - "filename.c", "/file/dir", "CloneFunc", false, "", 0); + auto *CU = + DBuilder.createCompileUnit(dwarf::DW_LANG_C99, "filename.c", + "/file/dir", "CloneFunc", false, "", 0); - DISubprogram Subprogram = DBuilder.createFunction(CU, "f", "f", File, 4, - FuncType, true, true, 3, 0, false, OldFunc); + auto *Subprogram = DBuilder.createFunction( + CU, "f", "f", File, 4, FuncType, true, true, 3, 0, false, OldFunc); // Function body BasicBlock* Entry = BasicBlock::Create(C, "", OldFunc); @@ -303,9 +304,9 @@ TEST_F(CloneFunc, Subprogram) { EXPECT_EQ(2U, SubprogramCount); auto Iter = Finder->subprograms().begin(); - DISubprogram Sub1 = cast(*Iter); + auto *Sub1 = cast(*Iter); Iter++; - DISubprogram Sub2 = cast(*Iter); + auto *Sub2 = cast(*Iter); EXPECT_TRUE( (Sub1->getFunction() == OldFunc && Sub2->getFunction() == NewFunc) || @@ -320,9 +321,9 @@ TEST_F(CloneFunc, SubprogramInRightCU) { EXPECT_EQ(2U, Finder->compile_unit_count()); auto Iter = Finder->compile_units().begin(); - DICompileUnit CU1 = cast(*Iter); + auto *CU1 = cast(*Iter); Iter++; - DICompileUnit CU2 = cast(*Iter); + auto *CU2 = cast(*Iter); EXPECT_TRUE(CU1->getSubprograms().size() == 0 || CU2->getSubprograms().size() == 0); }