diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/ProfileData/InstrProfReader.h | 4 | ||||
-rw-r--r-- | llvm/lib/ProfileData/CoverageMapping.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/ProfileData/InstrProfReader.cpp | 11 |
3 files changed, 13 insertions, 7 deletions
diff --git a/llvm/include/llvm/ProfileData/InstrProfReader.h b/llvm/include/llvm/ProfileData/InstrProfReader.h index 495966425c5..5dd1d4f9dd7 100644 --- a/llvm/include/llvm/ProfileData/InstrProfReader.h +++ b/llvm/include/llvm/ProfileData/InstrProfReader.h @@ -292,8 +292,8 @@ public: uint64_t getMaximumFunctionCount() { return MaxFunctionCount; } /// Factory method to create an indexed reader. - static std::error_code - create(std::string Path, std::unique_ptr<IndexedInstrProfReader> &Result); + static ErrorOr<std::unique_ptr<IndexedInstrProfReader>> + create(std::string Path); }; } // end namespace llvm diff --git a/llvm/lib/ProfileData/CoverageMapping.cpp b/llvm/lib/ProfileData/CoverageMapping.cpp index b3d9884d2a1..df6fae7b483 100644 --- a/llvm/lib/ProfileData/CoverageMapping.cpp +++ b/llvm/lib/ProfileData/CoverageMapping.cpp @@ -223,9 +223,10 @@ CoverageMapping::load(StringRef ObjectFilename, StringRef ProfileFilename) { ObjectFileCoverageMappingReader CoverageReader(CounterMappingBuff.get()); if (auto EC = CoverageReader.readHeader()) return EC; - std::unique_ptr<IndexedInstrProfReader> ProfileReader; - if (auto EC = IndexedInstrProfReader::create(ProfileFilename, ProfileReader)) + auto ProfileReaderOrErr = IndexedInstrProfReader::create(ProfileFilename); + if (auto EC = ProfileReaderOrErr.getError()) return EC; + auto ProfileReader = std::move(ProfileReaderOrErr.get()); return load(CoverageReader, *ProfileReader); } diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp index 31ed1309b46..d13f27c3113 100644 --- a/llvm/lib/ProfileData/InstrProfReader.cpp +++ b/llvm/lib/ProfileData/InstrProfReader.cpp @@ -64,21 +64,26 @@ InstrProfReader::create(std::string Path) { return std::move(Result); } -std::error_code IndexedInstrProfReader::create( - std::string Path, std::unique_ptr<IndexedInstrProfReader> &Result) { +ErrorOr<std::unique_ptr<IndexedInstrProfReader>> +IndexedInstrProfReader::create(std::string Path) { // Set up the buffer to read. auto BufferOrError = setupMemoryBuffer(Path); if (std::error_code EC = BufferOrError.getError()) return EC; auto Buffer = std::move(BufferOrError.get()); + std::unique_ptr<IndexedInstrProfReader> Result; + // Create the reader. if (!IndexedInstrProfReader::hasFormat(*Buffer)) return instrprof_error::bad_magic; Result.reset(new IndexedInstrProfReader(std::move(Buffer))); // Initialize the reader and return the result. - return initializeReader(*Result); + if (std::error_code EC = initializeReader(*Result)) + return EC; + + return std::move(Result); } void InstrProfIterator::Increment() { |