InstrProf: Simplify the construction of BinaryCoverageReader

Creating BinaryCoverageReader is a strange and complicated dance where
the constructor sets error codes that member functions will later
read, and the object is in an invalid state if readHeader isn't
immediately called after construction.

Instead, make the constructor private and add a static create method
to do the construction properly. This also has the benefit of removing
readHeader completely and simplifying the interface of the object.

llvm-svn: 230676
This commit is contained in:
Justin Bogner
2015-02-26 20:06:28 +00:00
parent e84891a459
commit 43e51634bb
3 changed files with 64 additions and 84 deletions

View File

@@ -219,16 +219,18 @@ CoverageMapping::load(CoverageMappingReader &CoverageReader,
ErrorOr<std::unique_ptr<CoverageMapping>>
CoverageMapping::load(StringRef ObjectFilename, StringRef ProfileFilename) {
auto CounterMappingBuff = MemoryBuffer::getFileOrSTDIN(ObjectFilename);
if (auto EC = CounterMappingBuff.getError())
if (std::error_code EC = CounterMappingBuff.getError())
return EC;
BinaryCoverageReader CoverageReader(CounterMappingBuff.get());
if (auto EC = CoverageReader.readHeader())
auto CoverageReaderOrErr =
BinaryCoverageReader::create(CounterMappingBuff.get());
if (std::error_code EC = CoverageReaderOrErr.getError())
return EC;
auto CoverageReader = std::move(CoverageReaderOrErr.get());
auto ProfileReaderOrErr = IndexedInstrProfReader::create(ProfileFilename);
if (auto EC = ProfileReaderOrErr.getError())
return EC;
auto ProfileReader = std::move(ProfileReaderOrErr.get());
return load(CoverageReader, *ProfileReader);
return load(*CoverageReader, *ProfileReader);
}
namespace {