diff options
author | Diego Novillo <dnovillo@google.com> | 2014-11-03 00:51:45 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@google.com> | 2014-11-03 00:51:45 +0000 |
commit | fcd556074c03ab47fe809e1f94fc78a3b3fe94dd (patch) | |
tree | 0a20112f562c2a7dd6c9c11b0eebde6cedecd04c /llvm/lib/ProfileData/SampleProfReader.cpp | |
parent | 4cd1d4ecb1a89d6201c24df5f48dd4c5366747fe (diff) | |
download | bcm5719-llvm-fcd556074c03ab47fe809e1f94fc78a3b3fe94dd.tar.gz bcm5719-llvm-fcd556074c03ab47fe809e1f94fc78a3b3fe94dd.zip |
Use ErrorOr for the ::create factory on instrumented and sample profilers.
Summary:
As discussed in
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20141027/242445.html,
the creation of reader and writer instances is better done using
ErrorOr. There are no functional changes, but several callers needed to
be adjusted.
Reviewers: bogner
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D6076
llvm-svn: 221120
Diffstat (limited to 'llvm/lib/ProfileData/SampleProfReader.cpp')
-rw-r--r-- | llvm/lib/ProfileData/SampleProfReader.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/llvm/lib/ProfileData/SampleProfReader.cpp b/llvm/lib/ProfileData/SampleProfReader.cpp index a6e4e0ce502..b39bfd6e2ec 100644 --- a/llvm/lib/ProfileData/SampleProfReader.cpp +++ b/llvm/lib/ProfileData/SampleProfReader.cpp @@ -356,18 +356,18 @@ bool SampleProfileReaderBinary::hasFormat(const MemoryBuffer &Buffer) { /// \brief Prepare a memory buffer for the contents of \p Filename. /// /// \returns an error code indicating the status of the buffer. -static std::error_code -setupMemoryBuffer(std::string Filename, std::unique_ptr<MemoryBuffer> &Buffer) { +static ErrorOr<std::unique_ptr<MemoryBuffer>> +setupMemoryBuffer(std::string Filename) { auto BufferOrErr = MemoryBuffer::getFileOrSTDIN(Filename); if (std::error_code EC = BufferOrErr.getError()) return EC; - Buffer = std::move(BufferOrErr.get()); + auto Buffer = std::move(BufferOrErr.get()); // Sanity check the file. if (Buffer->getBufferSize() > std::numeric_limits<unsigned>::max()) return sampleprof_error::too_large; - return sampleprof_error::success; + return std::move(Buffer); } /// \brief Create a sample profile reader based on the format of the input file. @@ -379,18 +379,21 @@ setupMemoryBuffer(std::string Filename, std::unique_ptr<MemoryBuffer> &Buffer) { /// \param C The LLVM context to use to emit diagnostics. /// /// \returns an error code indicating the status of the created reader. -std::error_code -SampleProfileReader::create(StringRef Filename, - std::unique_ptr<SampleProfileReader> &Reader, - LLVMContext &C) { - std::unique_ptr<MemoryBuffer> Buffer; - if (std::error_code EC = setupMemoryBuffer(Filename, Buffer)) +ErrorOr<std::unique_ptr<SampleProfileReader>> +SampleProfileReader::create(StringRef Filename, LLVMContext &C) { + auto BufferOrError = setupMemoryBuffer(Filename); + if (std::error_code EC = BufferOrError.getError()) return EC; + auto Buffer = std::move(BufferOrError.get()); + std::unique_ptr<SampleProfileReader> Reader; if (SampleProfileReaderBinary::hasFormat(*Buffer)) Reader.reset(new SampleProfileReaderBinary(std::move(Buffer), C)); else Reader.reset(new SampleProfileReaderText(std::move(Buffer), C)); - return Reader->readHeader(); + if (std::error_code EC = Reader->readHeader()) + return EC; + + return std::move(Reader); } |