From fcd556074c03ab47fe809e1f94fc78a3b3fe94dd Mon Sep 17 00:00:00 2001 From: Diego Novillo Date: Mon, 3 Nov 2014 00:51:45 +0000 Subject: 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 --- llvm/lib/ProfileData/SampleProfReader.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'llvm/lib/ProfileData/SampleProfReader.cpp') 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 &Buffer) { +static ErrorOr> +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::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 &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 &Reader, - LLVMContext &C) { - std::unique_ptr Buffer; - if (std::error_code EC = setupMemoryBuffer(Filename, Buffer)) +ErrorOr> +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 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); } -- cgit v1.2.3