From b4b2c8719aa85cc2249abff6e564ab210f1e5df1 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 3 May 2016 20:01:01 +0000 Subject: [ProfileData] Propagate an error from InstrProfSymtab CovMapFuncReader::get should propagate up errors from InstrProfSymtab. This is part of a series of patches to transition ProfileData over to the stricter Error/Expected interface. llvm-svn: 268428 --- llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp') diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index 78f7186eac8..9f27de91bc5 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -316,7 +316,7 @@ struct CovMapFuncRecordReader { const char *End) = 0; virtual ~CovMapFuncRecordReader() {} template - static std::unique_ptr + static ErrorOr> get(coverage::CovMapVersion Version, InstrProfSymtab &P, std::vector &R, std::vector &F); @@ -417,7 +417,7 @@ public: } // end anonymous namespace template -std::unique_ptr CovMapFuncRecordReader::get( +ErrorOr> CovMapFuncRecordReader::get( coverage::CovMapVersion Version, InstrProfSymtab &P, std::vector &R, std::vector &F) { @@ -428,7 +428,8 @@ std::unique_ptr CovMapFuncRecordReader::get( CovMapVersion::Version1, IntPtrT, Endian>>(P, R, F); case CovMapVersion::Version2: // Decompress the name data. - P.create(P.getNameData()); + if (auto EC = P.create(P.getNameData())) + return EC; return llvm::make_unique>(P, R, F); } @@ -447,9 +448,12 @@ static std::error_code readCoverageMappingData( CovMapVersion Version = (CovMapVersion)CovHeader->getVersion(); if (Version > coverage::CovMapVersion::CurrentVersion) return coveragemap_error::unsupported_version; - std::unique_ptr Reader = + ErrorOr> ReaderErrorOr = CovMapFuncRecordReader::get(Version, ProfileNames, Records, Filenames); + if (auto EC = ReaderErrorOr.getError()) + return EC; + auto Reader = std::move(ReaderErrorOr.get()); for (const char *Buf = Data.data(), *End = Buf + Data.size(); Buf < End;) { if (std::error_code EC = Reader->readFunctionRecords(Buf, End)) return EC; -- cgit v1.2.3