Index: llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h =================================================================== --- llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h +++ llvm/include/llvm/DebugInfo/DWARF/DWARFExpression.h @@ -109,11 +109,11 @@ /// 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,7 +130,7 @@ return *this; } - class Operation &operator*() const { + const class Operation &operator*() const { return Op; } Index: llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp =================================================================== --- llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp +++ llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp @@ -408,7 +408,7 @@ 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: { Index: llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp =================================================================== --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -552,9 +552,10 @@ 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 @@ 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; } Index: llvm/tools/llvm-dwarfdump/Statistics.cpp =================================================================== --- llvm/tools/llvm-dwarfdump/Statistics.cpp +++ llvm/tools/llvm-dwarfdump/Statistics.cpp @@ -322,7 +322,7 @@ 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; });