diff options
author | Vedant Kumar <vsk@apple.com> | 2017-09-08 18:44:47 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2017-09-08 18:44:47 +0000 |
commit | bae8397006fcb479bc9bcfe84e826bacbfbe7891 (patch) | |
tree | 0c0ce2fffaaec799f50bf914d6f74ac9652b37af /llvm/lib/ProfileData/Coverage/CoverageMapping.cpp | |
parent | 933b37f99f4f6f2ca3ab0d268caafc33c50bee84 (diff) | |
download | llvm-bae8397006fcb479bc9bcfe84e826bacbfbe7891.zip llvm-bae8397006fcb479bc9bcfe84e826bacbfbe7891.tar.gz llvm-bae8397006fcb479bc9bcfe84e826bacbfbe7891.tar.bz2 |
[Coverage] Report errors when reading malformed source regions
Each source region has a start and end location. Report an error when
the end location does not precede the begin location.
The old lineExecutionCounts.covmapping test actually had a buggy source
region in it. This commit introduces a regenerated copy of the coverage
and moves the old copy to malformedRegions.covmapping, for a test.
Differential Revision: https://reviews.llvm.org/D37387
llvm-svn: 312814
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMapping.cpp')
-rw-r--r-- | llvm/lib/ProfileData/Coverage/CoverageMapping.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp index 346ac76..d2878d3 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp @@ -250,10 +250,15 @@ Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load( IndexedInstrProfReader &ProfileReader) { auto Coverage = std::unique_ptr<CoverageMapping>(new CoverageMapping()); - for (const auto &CoverageReader : CoverageReaders) - for (const auto &Record : *CoverageReader) + for (const auto &CoverageReader : CoverageReaders) { + for (auto RecordOrErr : *CoverageReader) { + if (Error E = RecordOrErr.takeError()) + return std::move(E); + const auto &Record = *RecordOrErr; if (Error E = Coverage->loadFunctionRecord(Record, ProfileReader)) return std::move(E); + } + } return std::move(Coverage); } |