From: David Blaikie Date: Mon, 14 Apr 2014 22:45:02 +0000 (+0000) Subject: Use std::unique_ptr for DIE children X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=40352669ba5a42c22395abf03e289c4f2ee9ec47;p=oota-llvm.git Use std::unique_ptr for DIE children Got bored, removed some manual memory management. Pushed references (rather than pointers) through a few APIs rather than replacing *x with x.get(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206222 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DIE.cpp b/lib/CodeGen/AsmPrinter/DIE.cpp index 26e8f2da853..db891ae8d3f 100644 --- a/lib/CodeGen/AsmPrinter/DIE.cpp +++ b/lib/CodeGen/AsmPrinter/DIE.cpp @@ -104,15 +104,6 @@ void DIEAbbrev::print(raw_ostream &O) { void DIEAbbrev::dump() { print(dbgs()); } #endif -//===----------------------------------------------------------------------===// -// DIE Implementation -//===----------------------------------------------------------------------===// - -DIE::~DIE() { - for (unsigned i = 0, N = Children.size(); i < N; ++i) - delete Children[i]; -} - /// Climb up the parent chain to get the unit DIE to which this DIE /// belongs. const DIE *DIE::getUnit() const { diff --git a/lib/CodeGen/AsmPrinter/DIE.h b/lib/CodeGen/AsmPrinter/DIE.h index e26c525a9e1..3876728307d 100644 --- a/lib/CodeGen/AsmPrinter/DIE.h +++ b/lib/CodeGen/AsmPrinter/DIE.h @@ -124,7 +124,7 @@ protected: /// Children DIEs. /// - std::vector Children; + std::vector> Children; DIE *Parent; @@ -141,7 +141,6 @@ public: explicit DIE(dwarf::Tag Tag) : Offset(0), Size(0), Abbrev((dwarf::Tag)Tag, dwarf::DW_CHILDREN_no), Parent(0) {} - ~DIE(); // Accessors. DIEAbbrev &getAbbrev() { return Abbrev; } @@ -150,7 +149,9 @@ public: dwarf::Tag getTag() const { return Abbrev.getTag(); } unsigned getOffset() const { return Offset; } unsigned getSize() const { return Size; } - const std::vector &getChildren() const { return Children; } + const std::vector> &getChildren() const { + return Children; + } const SmallVectorImpl &getValues() const { return Values; } DIE *getParent() const { return Parent; } /// Climb up the parent chain to get the compile or type unit DIE this DIE @@ -174,7 +175,7 @@ public: void addChild(DIE *Child) { assert(!Child->getParent()); Abbrev.setChildrenFlag(dwarf::DW_CHILDREN_yes); - Children.push_back(Child); + Children.push_back(std::unique_ptr(Child)); Child->Parent = this; } diff --git a/lib/CodeGen/AsmPrinter/DIEHash.cpp b/lib/CodeGen/AsmPrinter/DIEHash.cpp index 74beec1c955..4cf57040e6d 100644 --- a/lib/CodeGen/AsmPrinter/DIEHash.cpp +++ b/lib/CodeGen/AsmPrinter/DIEHash.cpp @@ -463,20 +463,18 @@ void DIEHash::computeHash(const DIE &Die) { addAttributes(Die); // Then hash each of the children of the DIE. - for (std::vector::const_iterator I = Die.getChildren().begin(), - E = Die.getChildren().end(); - I != E; ++I) { + for (auto &C : Die.getChildren()) { // 7.27 Step 7 // If C is a nested type entry or a member function entry, ... - if (isType((*I)->getTag()) || (*I)->getTag() == dwarf::DW_TAG_subprogram) { - StringRef Name = getDIEStringAttr(**I, dwarf::DW_AT_name); + if (isType(C->getTag()) || C->getTag() == dwarf::DW_TAG_subprogram) { + StringRef Name = getDIEStringAttr(*C, dwarf::DW_AT_name); // ... and has a DW_AT_name attribute if (!Name.empty()) { - hashNestedType(**I, Name); + hashNestedType(*C, Name); continue; } } - computeHash(**I); + computeHash(*C); } // Following the last (or if there are no children), append a zero byte. diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 2c5a1e2dbfa..d5c8a0a7b82 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1798,20 +1798,20 @@ void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S, // Compute the size and offset of a DIE. The offset is relative to start of the // CU. It returns the offset after laying out the DIE. -unsigned DwarfFile::computeSizeAndOffset(DIE *Die, unsigned Offset) { +unsigned DwarfFile::computeSizeAndOffset(DIE &Die, unsigned Offset) { // Record the abbreviation. - assignAbbrevNumber(Die->getAbbrev()); + assignAbbrevNumber(Die.getAbbrev()); // Get the abbreviation for this DIE. - const DIEAbbrev &Abbrev = Die->getAbbrev(); + const DIEAbbrev &Abbrev = Die.getAbbrev(); // Set DIE offset - Die->setOffset(Offset); + Die.setOffset(Offset); // Start the size with the size of abbreviation code. - Offset += getULEB128Size(Die->getAbbrevNumber()); + Offset += getULEB128Size(Die.getAbbrevNumber()); - const SmallVectorImpl &Values = Die->getValues(); + const SmallVectorImpl &Values = Die.getValues(); const SmallVectorImpl &AbbrevData = Abbrev.getData(); // Size the DIE attribute values. @@ -1820,20 +1820,20 @@ unsigned DwarfFile::computeSizeAndOffset(DIE *Die, unsigned Offset) { Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm()); // Get the children. - const std::vector &Children = Die->getChildren(); + const auto &Children = Die.getChildren(); // Size the DIE children if any. if (!Children.empty()) { assert(Abbrev.hasChildren() && "Children flag not set"); - for (DIE *Child : Children) - Offset = computeSizeAndOffset(Child, Offset); + for (auto &Child : Children) + Offset = computeSizeAndOffset(*Child, Offset); // End of children marker. Offset += sizeof(int8_t); } - Die->setSize(Offset - Die->getOffset()); + Die.setSize(Offset - Die.getOffset()); return Offset; } @@ -1853,7 +1853,7 @@ void DwarfFile::computeSizeAndOffsets() { // EndOffset here is CU-relative, after laying out // all of the CU DIE. - unsigned EndOffset = computeSizeAndOffset(TheU->getUnitDie(), Offset); + unsigned EndOffset = computeSizeAndOffset(*TheU->getUnitDie(), Offset); SecOffset += EndOffset; } } @@ -1905,19 +1905,19 @@ void DwarfDebug::emitSectionLabels() { } // Recursively emits a debug information entry. -void DwarfDebug::emitDIE(DIE *Die) { +void DwarfDebug::emitDIE(DIE &Die) { // Get the abbreviation for this DIE. - const DIEAbbrev &Abbrev = Die->getAbbrev(); + const DIEAbbrev &Abbrev = Die.getAbbrev(); // Emit the code (index) for the abbreviation. if (Asm->isVerbose()) Asm->OutStreamer.AddComment("Abbrev [" + Twine(Abbrev.getNumber()) + - "] 0x" + Twine::utohexstr(Die->getOffset()) + - ":0x" + Twine::utohexstr(Die->getSize()) + " " + + "] 0x" + Twine::utohexstr(Die.getOffset()) + + ":0x" + Twine::utohexstr(Die.getSize()) + " " + dwarf::TagString(Abbrev.getTag())); Asm->EmitULEB128(Abbrev.getNumber()); - const SmallVectorImpl &Values = Die->getValues(); + const SmallVectorImpl &Values = Die.getValues(); const SmallVectorImpl &AbbrevData = Abbrev.getData(); // Emit the DIE attribute values. @@ -1939,10 +1939,8 @@ void DwarfDebug::emitDIE(DIE *Die) { // Emit the DIE children if any. if (Abbrev.hasChildren()) { - const std::vector &Children = Die->getChildren(); - - for (DIE *Child : Children) - emitDIE(Child); + for (auto &Child : Die.getChildren()) + emitDIE(*Child); Asm->OutStreamer.AddComment("End Of Children Mark"); Asm->EmitInt8(0); @@ -1966,7 +1964,7 @@ void DwarfFile::emitUnits(DwarfDebug *DD, const MCSymbol *ASectionSym) { TheU->emitHeader(ASectionSym); - DD->emitDIE(Die); + DD->emitDIE(*Die); Asm->OutStreamer.EmitLabel(TheU->getLabelEnd()); } } diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 54bdf28ebd5..8c4514e615e 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -178,7 +178,7 @@ public: const SmallVectorImpl &getUnits() { return CUs; } /// \brief Compute the size and offset of a DIE given an incoming Offset. - unsigned computeSizeAndOffset(DIE *Die, unsigned Offset); + unsigned computeSizeAndOffset(DIE &Die, unsigned Offset); /// \brief Compute the size and offset of all the DIEs. void computeSizeAndOffsets(); @@ -666,7 +666,7 @@ public: } /// \brief Recursively Emits a debug information entry. - void emitDIE(DIE *Die); + void emitDIE(DIE &Die); // Experimental DWARF5 features.