From 7e0b02330223ad79eab7842d82c4043fdd2deeec Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Tue, 22 May 2018 17:37:27 +0000 Subject: [PATCH] [DebugInfo] Fix location list check in the verifier We weren't properly verifying location lists because we tried obtaining the offset as a constant. llvm-svn: 333005 --- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 4f1095cc310d..356b141f44fe 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -409,7 +409,7 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, ReportError("DIE has invalid DW_AT_stmt_list encoding:"); break; case DW_AT_location: { - auto VerifyLocation = [&](StringRef D) { + auto VerifyLocationExpr = [&](StringRef D) { DWARFUnit *U = Die.getDwarfUnit(); DataExtractor Data(D, DCtx.isLittleEndian(), 0); DWARFExpression Expression(Data, U->getVersion(), @@ -422,13 +422,13 @@ unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, }; if (Optional> Expr = AttrValue.Value.getAsBlock()) { // Verify inlined location. - VerifyLocation(llvm::toStringRef(*Expr)); - } else if (auto LocOffset = AttrValue.Value.getAsUnsignedConstant()) { + VerifyLocationExpr(llvm::toStringRef(*Expr)); + } else if (auto LocOffset = AttrValue.Value.getAsSectionOffset()) { // Verify location list. if (auto DebugLoc = DCtx.getDebugLoc()) if (auto LocList = DebugLoc->getLocationListAtOffset(*LocOffset)) for (const auto &Entry : LocList->Entries) - VerifyLocation({Entry.Loc.data(), Entry.Loc.size()}); + VerifyLocationExpr({Entry.Loc.data(), Entry.Loc.size()}); } break; }