[llvm] r203766 - [C++11] Convert DWARF parser to range-based for loops
David Blaikie
dblaikie at gmail.com
Thu Mar 13 08:43:43 PDT 2014
On Thu, Mar 13, 2014 at 12:52 AM, Alexey Samsonov <samsonov at google.com> wrote:
> Author: samsonov
> Date: Thu Mar 13 02:52:54 2014
> New Revision: 203766
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203766&view=rev
> Log:
> [C++11] Convert DWARF parser to range-based for loops
Thanks for the cleanup!
>
> Modified:
> llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp
> llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.h
> llvm/trunk/lib/DebugInfo/DWARFContext.cpp
> llvm/trunk/lib/DebugInfo/DWARFContext.h
> llvm/trunk/lib/DebugInfo/DWARFDebugAbbrev.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.h
> llvm/trunk/lib/DebugInfo/DWARFDebugAranges.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugFrame.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugFrame.h
> llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.h
> llvm/trunk/lib/DebugInfo/DWARFDebugLine.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugLoc.cpp
> llvm/trunk/lib/DebugInfo/DWARFDebugRangeList.cpp
> llvm/trunk/lib/DebugInfo/DWARFUnit.cpp
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp Thu Mar 13 02:52:54 2014
> @@ -18,7 +18,7 @@ void DWARFAbbreviationDeclaration::clear
> Code = 0;
> Tag = 0;
> HasChildren = false;
> - Attributes.clear();
> + AttributeSpecs.clear();
> }
>
> DWARFAbbreviationDeclaration::DWARFAbbreviationDeclaration() {
> @@ -51,7 +51,8 @@ DWARFAbbreviationDeclaration::extract(Da
> }
> if (Attr == 0 && Form == 0)
> break;
> - Attributes.push_back(AttributeSpec(Attr, Form));
> + AttributeSpec AS = {Attr, Form};
> + AttributeSpecs.push_back(AS);
Any particular reason for the rename (Attributes->AttributeSpecs?) and
reformat (creating the named local AS rather than just a temporary)?
> }
>
> if (Tag == 0) {
> @@ -69,19 +70,19 @@ void DWARFAbbreviationDeclaration::dump(
> else
> OS << format("DW_TAG_Unknown_%x", getTag());
> OS << "\tDW_CHILDREN_" << (hasChildren() ? "yes" : "no") << '\n';
> - for (unsigned i = 0, e = Attributes.size(); i != e; ++i) {
> + for (const AttributeSpec &Spec : AttributeSpecs) {
> OS << '\t';
> - const char *attrString = AttributeString(Attributes[i].Attr);
> + const char *attrString = AttributeString(Spec.Attr);
> if (attrString)
> OS << attrString;
> else
> - OS << format("DW_AT_Unknown_%x", Attributes[i].Attr);
> + OS << format("DW_AT_Unknown_%x", Spec.Attr);
> OS << '\t';
> - const char *formString = FormEncodingString(Attributes[i].Form);
> + const char *formString = FormEncodingString(Spec.Form);
> if (formString)
> OS << formString;
> else
> - OS << format("DW_FORM_Unknown_%x", Attributes[i].Form);
> + OS << format("DW_FORM_Unknown_%x", Spec.Form);
> OS << '\n';
> }
> OS << '\n';
> @@ -89,8 +90,8 @@ void DWARFAbbreviationDeclaration::dump(
>
> uint32_t
> DWARFAbbreviationDeclaration::findAttributeIndex(uint16_t attr) const {
> - for (uint32_t i = 0, e = Attributes.size(); i != e; ++i) {
> - if (Attributes[i].Attr == attr)
> + for (uint32_t i = 0, e = AttributeSpecs.size(); i != e; ++i) {
> + if (AttributeSpecs[i].Attr == attr)
> return i;
> }
> return -1U;
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.h?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.h (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFAbbreviationDeclaration.h Thu Mar 13 02:52:54 2014
> @@ -23,23 +23,27 @@ class DWARFAbbreviationDeclaration {
> bool HasChildren;
>
> struct AttributeSpec {
> - AttributeSpec(uint16_t Attr, uint16_t Form) : Attr(Attr), Form(Form) {}
> uint16_t Attr;
> uint16_t Form;
> };
> - SmallVector<AttributeSpec, 8> Attributes;
> + typedef SmallVector<AttributeSpec, 8> AttributeSpecVector;
> + AttributeSpecVector AttributeSpecs;
> public:
> DWARFAbbreviationDeclaration();
>
> uint32_t getCode() const { return Code; }
> uint32_t getTag() const { return Tag; }
> bool hasChildren() const { return HasChildren; }
> - uint32_t getNumAttributes() const { return Attributes.size(); }
> - uint16_t getAttrByIndex(uint32_t idx) const {
> - return idx < Attributes.size() ? Attributes[idx].Attr : 0;
> +
> + typedef iterator_range<AttributeSpecVector::const_iterator>
> + attr_iterator_range;
> +
> + attr_iterator_range attributes() const {
> + return attr_iterator_range(AttributeSpecs.begin(), AttributeSpecs.end());
> }
> +
> uint16_t getFormByIndex(uint32_t idx) const {
> - return idx < Attributes.size() ? Attributes[idx].Form : 0;
> + return idx < AttributeSpecs.size() ? AttributeSpecs[idx].Form : 0;
> }
>
> uint32_t findAttributeIndex(uint16_t attr) const;
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFContext.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFContext.cpp Thu Mar 13 02:52:54 2014
> @@ -75,29 +75,29 @@ void DWARFContext::dump(raw_ostream &OS,
>
> if (DumpType == DIDT_All || DumpType == DIDT_Info) {
> OS << "\n.debug_info contents:\n";
> - for (unsigned i = 0, e = getNumCompileUnits(); i != e; ++i)
> - getCompileUnitAtIndex(i)->dump(OS);
> + for (const auto &CU : compile_units())
> + CU->dump(OS);
> }
>
> if ((DumpType == DIDT_All || DumpType == DIDT_InfoDwo) &&
> getNumDWOCompileUnits()) {
> OS << "\n.debug_info.dwo contents:\n";
> - for (unsigned i = 0, e = getNumDWOCompileUnits(); i != e; ++i)
> - getDWOCompileUnitAtIndex(i)->dump(OS);
> + for (const auto &DWOCU : dwo_compile_units())
> + DWOCU->dump(OS);
> }
>
> if ((DumpType == DIDT_All || DumpType == DIDT_Types) && getNumTypeUnits()) {
> OS << "\n.debug_types contents:\n";
> - for (unsigned i = 0, e = getNumTypeUnits(); i != e; ++i)
> - getTypeUnitAtIndex(i)->dump(OS);
> + for (const auto &TU : type_units())
> + TU->dump(OS);
> }
>
> - if (DumpType == DIDT_All || DumpType == DIDT_TypesDwo)
> - if (getNumDWOTypeUnits()) {
> - OS << "\n.debug_types.dwo contents:\n";
> - for (unsigned i = 0, e = getNumDWOTypeUnits(); i != e; ++i)
> - getDWOTypeUnitAtIndex(i)->dump(OS);
> - }
> + if ((DumpType == DIDT_All || DumpType == DIDT_TypesDwo) &&
> + getNumDWOTypeUnits()) {
> + OS << "\n.debug_types.dwo contents:\n";
> + for (const auto &DWOTU : dwo_type_units())
> + DWOTU->dump(OS);
> + }
>
> if (DumpType == DIDT_All || DumpType == DIDT_Loc) {
> OS << "\n.debug_loc contents:\n";
> @@ -121,12 +121,11 @@ void DWARFContext::dump(raw_ostream &OS,
> uint8_t savedAddressByteSize = 0;
> if (DumpType == DIDT_All || DumpType == DIDT_Line) {
> OS << "\n.debug_line contents:\n";
> - for (unsigned i = 0, e = getNumCompileUnits(); i != e; ++i) {
> - DWARFCompileUnit *cu = getCompileUnitAtIndex(i);
> - savedAddressByteSize = cu->getAddressByteSize();
> + for (const auto &CU : compile_units()) {
> + savedAddressByteSize = CU->getAddressByteSize();
> unsigned stmtOffset =
> - cu->getCompileUnitDIE()->getAttributeValueAsSectionOffset(
> - cu, DW_AT_stmt_list, -1U);
> + CU->getCompileUnitDIE()->getAttributeValueAsSectionOffset(
> + CU, DW_AT_stmt_list, -1U);
> if (stmtOffset != -1U) {
> DataExtractor lineData(getLineSection().Data, isLittleEndian(),
> savedAddressByteSize);
> @@ -297,6 +296,8 @@ DWARFContext::getLineTableForCompileUnit
> }
>
> void DWARFContext::parseCompileUnits() {
> + if (!CUs.empty())
> + return;
> uint32_t offset = 0;
> const DataExtractor &DIData = DataExtractor(getInfoSection().Data,
> isLittleEndian(), 0);
> @@ -314,17 +315,17 @@ void DWARFContext::parseCompileUnits() {
> }
>
> void DWARFContext::parseTypeUnits() {
> - const TypeSectionMap &Sections = getTypesSections();
> - for (TypeSectionMap::const_iterator I = Sections.begin(), E = Sections.end();
> - I != E; ++I) {
> + if (!TUs.empty())
> + return;
> + for (const auto &I : getTypesSections()) {
> uint32_t offset = 0;
> const DataExtractor &DIData =
> - DataExtractor(I->second.Data, isLittleEndian(), 0);
> + DataExtractor(I.second.Data, isLittleEndian(), 0);
> while (DIData.isValidOffset(offset)) {
> std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(
> - getDebugAbbrev(), I->second.Data, getAbbrevSection(),
> + getDebugAbbrev(), I.second.Data, getAbbrevSection(),
> getRangeSection(), getStringSection(), StringRef(), getAddrSection(),
> - &I->second.Relocs, isLittleEndian()));
> + &I.second.Relocs, isLittleEndian()));
> if (!TU->extract(DIData, &offset))
> break;
> TUs.push_back(TU.release());
> @@ -334,6 +335,8 @@ void DWARFContext::parseTypeUnits() {
> }
>
> void DWARFContext::parseDWOCompileUnits() {
> + if (!DWOCUs.empty())
> + return;
> uint32_t offset = 0;
> const DataExtractor &DIData =
> DataExtractor(getInfoDWOSection().Data, isLittleEndian(), 0);
> @@ -352,17 +355,17 @@ void DWARFContext::parseDWOCompileUnits(
> }
>
> void DWARFContext::parseDWOTypeUnits() {
> - const TypeSectionMap &Sections = getTypesDWOSections();
> - for (TypeSectionMap::const_iterator I = Sections.begin(), E = Sections.end();
> - I != E; ++I) {
> + if (!DWOTUs.empty())
> + return;
> + for (const auto &I : getTypesDWOSections()) {
> uint32_t offset = 0;
> const DataExtractor &DIData =
> - DataExtractor(I->second.Data, isLittleEndian(), 0);
> + DataExtractor(I.second.Data, isLittleEndian(), 0);
> while (DIData.isValidOffset(offset)) {
> std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(
> - getDebugAbbrevDWO(), I->second.Data, getAbbrevDWOSection(),
> + getDebugAbbrevDWO(), I.second.Data, getAbbrevDWOSection(),
> getRangeDWOSection(), getStringDWOSection(),
> - getStringOffsetDWOSection(), getAddrSection(), &I->second.Relocs,
> + getStringOffsetDWOSection(), getAddrSection(), &I.second.Relocs,
> isLittleEndian()));
> if (!TU->extract(DIData, &offset))
> break;
> @@ -388,8 +391,7 @@ namespace {
> }
>
> DWARFCompileUnit *DWARFContext::getCompileUnitForOffset(uint32_t Offset) {
> - if (CUs.empty())
> - parseCompileUnits();
> + parseCompileUnits();
>
> DWARFCompileUnit **CU =
> std::lower_bound(CUs.begin(), CUs.end(), Offset, OffsetComparator());
> @@ -522,9 +524,7 @@ DILineInfoTable DWARFContext::getLineInf
> if (!LineTable->lookupAddressRange(Address, Size, RowVector))
> return Lines;
>
> - uint32_t NumRows = RowVector.size();
> - for (uint32_t i = 0; i < NumRows; ++i) {
> - uint32_t RowIndex = RowVector[i];
> + for (uint32_t RowIndex : RowVector) {
> // Take file number and line/column from the row.
> const DWARFDebugLine::Row &Row = LineTable->Rows[RowIndex];
> std::string FileName = "<invalid>";
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.h?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFContext.h (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFContext.h Thu Mar 13 02:52:54 2014
> @@ -28,33 +28,38 @@ namespace llvm {
> /// information parsing. The actual data is supplied through pure virtual
> /// methods that a concrete implementation provides.
> class DWARFContext : public DIContext {
> - SmallVector<DWARFCompileUnit *, 1> CUs;
> - SmallVector<DWARFTypeUnit *, 1> TUs;
> + typedef SmallVector<DWARFCompileUnit *, 1> CUVector;
> + typedef SmallVector<DWARFTypeUnit *, 1> TUVector;
> +
> + CUVector CUs;
> + TUVector TUs;
> std::unique_ptr<DWARFDebugAbbrev> Abbrev;
> std::unique_ptr<DWARFDebugLoc> Loc;
> std::unique_ptr<DWARFDebugAranges> Aranges;
> std::unique_ptr<DWARFDebugLine> Line;
> std::unique_ptr<DWARFDebugFrame> DebugFrame;
>
> - SmallVector<DWARFCompileUnit *, 1> DWOCUs;
> - SmallVector<DWARFTypeUnit *, 1> DWOTUs;
> + CUVector DWOCUs;
> + TUVector DWOTUs;
> std::unique_ptr<DWARFDebugAbbrev> AbbrevDWO;
>
> DWARFContext(DWARFContext &) LLVM_DELETED_FUNCTION;
> DWARFContext &operator=(DWARFContext &) LLVM_DELETED_FUNCTION;
>
> - /// Read compile units from the debug_info section and store them in CUs.
> + /// Read compile units from the debug_info section (if necessary)
> + /// and store them in CUs.
> void parseCompileUnits();
>
> - /// Read type units from the debug_types sections and store them in CUs.
> + /// Read type units from the debug_types sections (if necessary)
> + /// and store them in TUs.
> void parseTypeUnits();
>
> - /// Read compile units from the debug_info.dwo section and store them in
> - /// DWOCUs.
> + /// Read compile units from the debug_info.dwo section (if necessary)
> + /// and store them in DWOCUs.
> void parseDWOCompileUnits();
>
> - /// Read type units from the debug_types.dwo section and store them in
> - /// DWOTUs.
> + /// Read type units from the debug_types.dwo section (if necessary)
> + /// and store them in DWOTUs.
> void parseDWOTypeUnits();
>
> public:
> @@ -72,62 +77,69 @@ public:
>
> void dump(raw_ostream &OS, DIDumpType DumpType = DIDT_All) override;
>
> + typedef iterator_range<CUVector::iterator> cu_iterator_range;
> + typedef iterator_range<TUVector::iterator> tu_iterator_range;
> +
> + /// Get compile units in this context.
> + cu_iterator_range compile_units() {
> + parseCompileUnits();
> + return cu_iterator_range(CUs.begin(), CUs.end());
> + }
> +
> + /// Get type units in this context.
> + tu_iterator_range type_units() {
> + parseTypeUnits();
> + return tu_iterator_range(TUs.begin(), TUs.end());
> + }
> +
> + /// Get compile units in the DWO context.
> + cu_iterator_range dwo_compile_units() {
> + parseDWOCompileUnits();
> + return cu_iterator_range(DWOCUs.begin(), DWOCUs.end());
> + }
> +
> + /// Get type units in the DWO context.
> + tu_iterator_range dwo_type_units() {
> + parseDWOTypeUnits();
> + return tu_iterator_range(DWOTUs.begin(), DWOTUs.end());
> + }
> +
> /// Get the number of compile units in this context.
> unsigned getNumCompileUnits() {
> - if (CUs.empty())
> - parseCompileUnits();
> + parseCompileUnits();
> return CUs.size();
> }
>
> /// Get the number of compile units in this context.
> unsigned getNumTypeUnits() {
> - if (TUs.empty())
> - parseTypeUnits();
> + parseTypeUnits();
> return TUs.size();
> }
>
> /// Get the number of compile units in the DWO context.
> unsigned getNumDWOCompileUnits() {
> - if (DWOCUs.empty())
> - parseDWOCompileUnits();
> + parseDWOCompileUnits();
> return DWOCUs.size();
> }
>
> /// Get the number of compile units in the DWO context.
> unsigned getNumDWOTypeUnits() {
> - if (DWOTUs.empty())
> - parseDWOTypeUnits();
> + parseDWOTypeUnits();
> return DWOTUs.size();
> }
>
> /// Get the compile unit at the specified index for this compile unit.
> DWARFCompileUnit *getCompileUnitAtIndex(unsigned index) {
> - if (CUs.empty())
> - parseCompileUnits();
> + parseCompileUnits();
> return CUs[index];
> }
>
> - /// Get the type unit at the specified index for this compile unit.
> - DWARFTypeUnit *getTypeUnitAtIndex(unsigned index) {
> - if (TUs.empty())
> - parseTypeUnits();
> - return TUs[index];
> - }
> -
> /// Get the compile unit at the specified index for the DWO compile units.
> DWARFCompileUnit *getDWOCompileUnitAtIndex(unsigned index) {
> - if (DWOCUs.empty())
> - parseDWOCompileUnits();
> + parseDWOCompileUnits();
> return DWOCUs[index];
> }
>
> - /// Get the type unit at the specified index for the DWO type units.
> - DWARFTypeUnit *getDWOTypeUnitAtIndex(unsigned index) {
> - if (DWOTUs.empty())
> - parseDWOTypeUnits();
> - return DWOTUs[index];
> - }
> -
> /// Get a pointer to the parsed DebugAbbrev object.
> const DWARFDebugAbbrev *getDebugAbbrev();
>
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugAbbrev.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugAbbrev.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugAbbrev.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugAbbrev.cpp Thu Mar 13 02:52:54 2014
> @@ -33,19 +33,17 @@ bool DWARFAbbreviationDeclarationSet::ex
> }
>
> void DWARFAbbreviationDeclarationSet::dump(raw_ostream &OS) const {
> - for (unsigned i = 0, e = Decls.size(); i != e; ++i)
> - Decls[i].dump(OS);
> + for (const auto &Decl : Decls)
> + Decl.dump(OS);
> }
>
> const DWARFAbbreviationDeclaration*
> DWARFAbbreviationDeclarationSet::getAbbreviationDeclaration(uint32_t abbrCode)
> const {
> if (IdxOffset == UINT32_MAX) {
> - DWARFAbbreviationDeclarationCollConstIter pos;
> - DWARFAbbreviationDeclarationCollConstIter end = Decls.end();
> - for (pos = Decls.begin(); pos != end; ++pos) {
> - if (pos->getCode() == abbrCode)
> - return &(*pos);
> + for (const auto &Decl : Decls) {
> + if (Decl.getCode() == abbrCode)
> + return &Decl;
> }
> } else {
> uint32_t idx = abbrCode - IdxOffset;
> @@ -81,10 +79,9 @@ void DWARFDebugAbbrev::dump(raw_ostream
> return;
> }
>
> - DWARFAbbreviationDeclarationCollMapConstIter pos;
> - for (pos = AbbrevCollMap.begin(); pos != AbbrevCollMap.end(); ++pos) {
> - OS << format("Abbrev table for offset: 0x%8.8" PRIx64 "\n", pos->first);
> - pos->second.dump(OS);
> + for (const auto &I : AbbrevCollMap) {
> + OS << format("Abbrev table for offset: 0x%8.8" PRIx64 "\n", I.first);
> + I.second.dump(OS);
> }
> }
>
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.cpp Thu Mar 13 02:52:54 2014
> @@ -94,9 +94,9 @@ void DWARFDebugArangeSet::dump(raw_ostre
> HeaderData.CuOffset, HeaderData.AddrSize, HeaderData.SegSize);
>
> const uint32_t hex_width = HeaderData.AddrSize * 2;
> - for (DescriptorConstIter pos = ArangeDescriptors.begin(),
> - end = ArangeDescriptors.end(); pos != end; ++pos)
> - OS << format("[0x%*.*" PRIx64 " -", hex_width, hex_width, pos->Address)
> + for (const auto &Desc : ArangeDescriptors) {
> + OS << format("[0x%*.*" PRIx64 " -", hex_width, hex_width, Desc.Address)
> << format(" 0x%*.*" PRIx64 ")\n",
> - hex_width, hex_width, pos->getEndAddress());
> + hex_width, hex_width, Desc.getEndAddress());
> + }
> }
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.h?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.h (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugArangeSet.h Thu Mar 13 02:52:54 2014
> @@ -10,6 +10,7 @@
> #ifndef LLVM_DEBUGINFO_DWARFDEBUGARANGESET_H
> #define LLVM_DEBUGINFO_DWARFDEBUGARANGESET_H
>
> +#include "llvm/ADT/iterator_range.h"
> #include "llvm/Support/DataExtractor.h"
> #include <vector>
>
> @@ -44,7 +45,7 @@ public:
>
> private:
> typedef std::vector<Descriptor> DescriptorColl;
> - typedef DescriptorColl::const_iterator DescriptorConstIter;
> + typedef iterator_range<DescriptorColl::const_iterator> desc_iterator_range;
>
> uint32_t Offset;
> Header HeaderData;
> @@ -57,12 +58,12 @@ public:
> void dump(raw_ostream &OS) const;
>
> uint32_t getCompileUnitDIEOffset() const { return HeaderData.CuOffset; }
> - uint32_t getNumDescriptors() const { return ArangeDescriptors.size(); }
> - const Descriptor *getDescriptor(uint32_t i) const {
> - if (i < ArangeDescriptors.size())
> - return &ArangeDescriptors[i];
> - return NULL;
> +
> + desc_iterator_range descriptors() const {
> + return desc_iterator_range(ArangeDescriptors.begin(),
> + ArangeDescriptors.end());
> }
> + uint32_t getNumDescriptors() const { return ArangeDescriptors.size(); }
> };
>
> }
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugAranges.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugAranges.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugAranges.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugAranges.cpp Thu Mar 13 02:52:54 2014
> @@ -33,15 +33,12 @@ void DWARFDebugAranges::extract(DataExtr
> return;
>
> Aranges.reserve(TotalRanges);
> - for (RangeSetColl::const_iterator I = Sets.begin(), E = Sets.end(); I != E;
> - ++I) {
> - uint32_t CUOffset = I->getCompileUnitDIEOffset();
> -
> - for (uint32_t i = 0, n = I->getNumDescriptors(); i < n; ++i) {
> - const DWARFDebugArangeSet::Descriptor *ArangeDescPtr =
> - I->getDescriptor(i);
> - uint64_t LowPC = ArangeDescPtr->Address;
> - uint64_t HighPC = LowPC + ArangeDescPtr->Length;
> + for (const auto &I : Sets) {
> + uint32_t CUOffset = I.getCompileUnitDIEOffset();
> +
> + for (const auto &Desc : I.descriptors()) {
> + uint64_t LowPC = Desc.Address;
> + uint64_t HighPC = Desc.getEndAddress();
> appendRange(CUOffset, LowPC, HighPC);
> }
> }
> @@ -59,12 +56,10 @@ void DWARFDebugAranges::generate(DWARFCo
> // Generate aranges from DIEs: even if .debug_aranges section is present,
> // it may describe only a small subset of compilation units, so we need to
> // manually build aranges for the rest of them.
> - for (uint32_t i = 0, n = CTX->getNumCompileUnits(); i < n; ++i) {
> - if (DWARFCompileUnit *CU = CTX->getCompileUnitAtIndex(i)) {
> - uint32_t CUOffset = CU->getOffset();
> - if (ParsedCUOffsets.insert(CUOffset).second)
> - CU->buildAddressRangeTable(this, true, CUOffset);
> - }
> + for (const auto &CU : CTX->compile_units()) {
> + uint32_t CUOffset = CU->getOffset();
> + if (ParsedCUOffsets.insert(CUOffset).second)
> + CU->buildAddressRangeTable(this, true, CUOffset);
> }
>
> sortAndMinimize();
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugFrame.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugFrame.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugFrame.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugFrame.cpp Thu Mar 13 02:52:54 2014
> @@ -186,10 +186,8 @@ void FrameEntry::parseInstructions(uint3
> void FrameEntry::dumpInstructions(raw_ostream &OS) const {
> // TODO: at the moment only instruction names are dumped. Expand this to
> // dump operands as well.
> - for (std::vector<Instruction>::const_iterator I = Instructions.begin(),
> - E = Instructions.end();
> - I != E; ++I) {
> - uint8_t Opcode = I->Opcode;
> + for (const auto &Instr : Instructions) {
> + uint8_t Opcode = Instr.Opcode;
> if (Opcode & DWARF_CFI_PRIMARY_OPCODE_MASK)
> Opcode &= DWARF_CFI_PRIMARY_OPCODE_MASK;
> OS << " " << CallFrameString(Opcode) << ":\n";
> @@ -289,9 +287,8 @@ DWARFDebugFrame::DWARFDebugFrame() {
>
>
> DWARFDebugFrame::~DWARFDebugFrame() {
> - for (EntryVector::iterator I = Entries.begin(), E = Entries.end();
> - I != E; ++I) {
> - delete *I;
> + for (const auto &Entry : Entries) {
> + delete Entry;
> }
> }
>
> @@ -381,9 +378,7 @@ void DWARFDebugFrame::parse(DataExtracto
>
> void DWARFDebugFrame::dump(raw_ostream &OS) const {
> OS << "\n";
> - for (EntryVector::const_iterator I = Entries.begin(), E = Entries.end();
> - I != E; ++I) {
> - FrameEntry *Entry = *I;
> + for (const auto &Entry : Entries) {
> Entry->dumpHeader(OS);
> Entry->dumpInstructions(OS);
> OS << "\n";
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugFrame.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugFrame.h?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugFrame.h (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugFrame.h Thu Mar 13 02:52:54 2014
> @@ -42,5 +42,4 @@ private:
>
> } // namespace llvm
>
> -#endif
> -
> +#endif
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp Thu Mar 13 02:52:54 2014
> @@ -40,11 +40,8 @@ void DWARFDebugInfoEntryMinimal::dump(ra
> AbbrevDecl->hasChildren() ? '*' : ' ');
>
> // Dump all data in the DIE for the attributes.
> - const uint32_t numAttributes = AbbrevDecl->getNumAttributes();
> - for (uint32_t i = 0; i != numAttributes; ++i) {
> - uint16_t attr = AbbrevDecl->getAttrByIndex(i);
> - uint16_t form = AbbrevDecl->getFormByIndex(i);
> - dumpAttribute(OS, u, &offset, attr, form, indent);
> + for (const auto &AttrSpec : AbbrevDecl->attributes()) {
> + dumpAttribute(OS, u, &offset, AttrSpec.Attr, AttrSpec.Form, indent);
> }
>
> const DWARFDebugInfoEntryMinimal *child = getFirstChild();
> @@ -116,8 +113,8 @@ bool DWARFDebugInfoEntryMinimal::extract
> assert(FixedFormSizes.size() > 0);
>
> // Skip all data in the .debug_info for the attributes
> - for (uint32_t i = 0, n = AbbrevDecl->getNumAttributes(); i < n; ++i) {
> - uint16_t Form = AbbrevDecl->getFormByIndex(i);
> + for (const auto &AttrSpec : AbbrevDecl->attributes()) {
> + uint16_t Form = AttrSpec.Form;
>
> uint8_t FixedFormSize =
> (Form < FixedFormSizes.size()) ? FixedFormSizes[Form] : 0;
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.h?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.h (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.h Thu Mar 13 02:52:54 2014
> @@ -60,9 +60,6 @@ public:
> bool isSubroutineDIE() const;
>
> uint32_t getOffset() const { return Offset; }
> - uint32_t getNumAttributes() const {
> - return !isNULL() ? AbbrevDecl->getNumAttributes() : 0;
> - }
> bool hasChildren() const { return !isNULL() && AbbrevDecl->hasChildren(); }
>
> // We know we are kept in a vector of contiguous entries, so we know
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugLine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugLine.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugLine.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugLine.cpp Thu Mar 13 02:52:54 2014
> @@ -90,9 +90,9 @@ void DWARFDebugLine::LineTable::dump(raw
> OS << "Address Line Column File ISA Discriminator Flags\n"
> << "------------------ ------ ------ ------ --- ------------- "
> "-------------\n";
> - for (std::vector<Row>::const_iterator pos = Rows.begin(),
> - end = Rows.end(); pos != end; ++pos)
> - pos->dump(OS);
> + for (const Row &R : Rows) {
> + R.dump(OS);
> + }
> }
> }
>
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugLoc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugLoc.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugLoc.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugLoc.cpp Thu Mar 13 02:52:54 2014
> @@ -15,19 +15,19 @@
> using namespace llvm;
>
> void DWARFDebugLoc::dump(raw_ostream &OS) const {
> - for (LocationLists::const_iterator I = Locations.begin(), E = Locations.end(); I != E; ++I) {
> - OS << format("0x%8.8x: ", I->Offset);
> + for (const LocationList &L : Locations) {
> + OS << format("0x%8.8x: ", L.Offset);
> const unsigned Indent = 12;
> - for (SmallVectorImpl<Entry>::const_iterator I2 = I->Entries.begin(), E2 = I->Entries.end(); I2 != E2; ++I2) {
> - if (I2 != I->Entries.begin())
> + for (const Entry &E : L.Entries) {
> + if (&E != L.Entries.begin())
> OS.indent(Indent);
> - OS << "Beginning address offset: " << format("0x%016" PRIx64, I2->Begin)
> + OS << "Beginning address offset: " << format("0x%016" PRIx64, E.Begin)
> << '\n';
> OS.indent(Indent) << " Ending address offset: "
> - << format("0x%016" PRIx64, I2->End) << '\n';
> + << format("0x%016" PRIx64, E.End) << '\n';
> OS.indent(Indent) << " Location description: ";
> - for (SmallVectorImpl<unsigned char>::const_iterator I3 = I2->Loc.begin(), E3 = I2->Loc.end(); I3 != E3; ++I3) {
> - OS << format("%2.2x ", *I3);
> + for (unsigned char Loc : E.Loc) {
> + OS << format("%2.2x ", Loc);
> }
> OS << "\n\n";
> }
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFDebugRangeList.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugRangeList.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFDebugRangeList.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFDebugRangeList.cpp Thu Mar 13 02:52:54 2014
> @@ -45,22 +45,21 @@ bool DWARFDebugRangeList::extract(DataEx
> }
>
> void DWARFDebugRangeList::dump(raw_ostream &OS) const {
> - for (int i = 0, n = Entries.size(); i != n; ++i) {
> + for (const RangeListEntry &RLE : Entries) {
> const char *format_str = (AddressSize == 4
> ? "%08x %08" PRIx64 " %08" PRIx64 "\n"
> : "%08x %016" PRIx64 " %016" PRIx64 "\n");
> - OS << format(format_str, Offset, Entries[i].StartAddress,
> - Entries[i].EndAddress);
> + OS << format(format_str, Offset, RLE.StartAddress, RLE.EndAddress);
> }
> OS << format("%08x <End of list>\n", Offset);
> }
>
> bool DWARFDebugRangeList::containsAddress(uint64_t BaseAddress,
> uint64_t Address) const {
> - for (int i = 0, n = Entries.size(); i != n; ++i) {
> - if (Entries[i].isBaseAddressSelectionEntry(AddressSize))
> - BaseAddress = Entries[i].EndAddress;
> - else if (Entries[i].containsAddress(BaseAddress, Address))
> + for (const RangeListEntry &RLE : Entries) {
> + if (RLE.isBaseAddressSelectionEntry(AddressSize))
> + BaseAddress = RLE.EndAddress;
> + else if (RLE.containsAddress(BaseAddress, Address))
> return true;
> }
> return false;
>
> Modified: llvm/trunk/lib/DebugInfo/DWARFUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.cpp?rev=203766&r1=203765&r2=203766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFUnit.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFUnit.cpp Thu Mar 13 02:52:54 2014
> @@ -331,11 +331,12 @@ DWARFUnit::buildAddressRangeTable(DWARFD
> const DWARFDebugInfoEntryMinimal *
> DWARFUnit::getSubprogramForAddress(uint64_t Address) {
> extractDIEsIfNeeded(false);
> - for (size_t i = 0, n = DieArray.size(); i != n; i++)
> - if (DieArray[i].isSubprogramDIE() &&
> - DieArray[i].addressRangeContainsAddress(this, Address)) {
> - return &DieArray[i];
> + for (const DWARFDebugInfoEntryMinimal &DIE : DieArray) {
> + if (DIE.isSubprogramDIE() &&
> + DIE.addressRangeContainsAddress(this, Address)) {
> + return &DIE;
> }
> + }
> return 0;
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list