From: Duncan P. N. Exon Smith Date: Tue, 16 Nov 2021 01:22:30 +0000 (-0800) Subject: DebugInfo: Make DWARFExpression::iterator a const iterator X-Git-Tag: upstream/15.0.7~25529 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fd6018072ace7d5cdf537fd63a44c050a98e52fc;p=platform%2Fupstream%2Fllvm.git DebugInfo: Make DWARFExpression::iterator a const iterator 3d1d8c767be5537eb5510ee0522e2f3475fe7c04 made DWARFExpression::iterator's Operation member `mutable`. After a few prep commits, the iterator can instead be made a `const` iterator since no caller can change the Operation. Differential Revision: https://reviews.llvm.org/D113958 --- diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h index f06a862..b694eea 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h @@ -109,11 +109,11 @@ public: /// An iterator to go through the expression operations. class iterator : public iterator_facade_base { + const Operation> { friend class DWARFExpression; const DWARFExpression *Expr; uint64_t Offset; - mutable Operation Op; + Operation Op; iterator(const DWARFExpression *Expr, uint64_t Offset) : Expr(Expr), Offset(Offset) { Op.Error = @@ -130,9 +130,7 @@ public: return *this; } - class Operation &operator*() const { - return Op; - } + const Operation &operator*() const { return Op; } iterator skipBytes(uint64_t Add) const { return iterator(Expr, Op.EndOffset + Add); diff --git a/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp b/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp index 3cdc169..d0fbd70 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp @@ -408,7 +408,7 @@ static bool printCompactDWARFExpr(raw_ostream &OS, DWARFExpression::iterator I, SmallVector Stack; while (I != E) { - DWARFExpression::Operation &Op = *I; + const DWARFExpression::Operation &Op = *I; uint8_t Opcode = Op.getCode(); switch (Opcode) { case dwarf::DW_OP_regx: { diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 0e7bce8..dcabefb 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -552,9 +552,10 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, DataExtractor Data(toStringRef(Entry.Expr), DCtx.isLittleEndian(), 0); DWARFExpression Expression(Data, U->getAddressByteSize(), U->getFormParams().Format); - bool Error = any_of(Expression, [](DWARFExpression::Operation &Op) { - return Op.isError(); - }); + bool Error = + any_of(Expression, [](const DWARFExpression::Operation &Op) { + return Op.isError(); + }); if (Error || !Expression.verify(U)) ReportError("DIE contains invalid DWARF expression:"); } @@ -1400,11 +1401,12 @@ static bool isVariableIndexable(const DWARFDie &Die, DWARFContext &DCtx) { U->getAddressByteSize()); DWARFExpression Expression(Data, U->getAddressByteSize(), U->getFormParams().Format); - bool IsInteresting = any_of(Expression, [](DWARFExpression::Operation &Op) { - return !Op.isError() && (Op.getCode() == DW_OP_addr || - Op.getCode() == DW_OP_form_tls_address || - Op.getCode() == DW_OP_GNU_push_tls_address); - }); + bool IsInteresting = + any_of(Expression, [](const DWARFExpression::Operation &Op) { + return !Op.isError() && (Op.getCode() == DW_OP_addr || + Op.getCode() == DW_OP_form_tls_address || + Op.getCode() == DW_OP_GNU_push_tls_address); + }); if (IsInteresting) return true; } diff --git a/llvm/tools/llvm-dwarfdump/Statistics.cpp b/llvm/tools/llvm-dwarfdump/Statistics.cpp index 8e91a6b..b237e01 100644 --- a/llvm/tools/llvm-dwarfdump/Statistics.cpp +++ b/llvm/tools/llvm-dwarfdump/Statistics.cpp @@ -322,7 +322,7 @@ static void collectStatsForDie(DWARFDie Die, const std::string &FnPrefix, U->getFormParams().Format); // Consider the expression containing the DW_OP_entry_value as // an entry value. - return llvm::any_of(Expression, [](DWARFExpression::Operation &Op) { + return llvm::any_of(Expression, [](const DWARFExpression::Operation &Op) { return Op.getCode() == dwarf::DW_OP_entry_value || Op.getCode() == dwarf::DW_OP_GNU_entry_value; });