summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorEric Beckmann <ecbeckmann@google.com>2017-06-19 18:49:05 +0000
committerEric Beckmann <ecbeckmann@google.com>2017-06-19 18:49:05 +0000
commitddcfbf7d0a550203b3d24e3c6026fc6c9ddf6a55 (patch)
treea65497c6d0b7592dbe9139335f4d136201425887 /llvm/lib
parent9083547ae317b7ddf604a5bedac994cb392bb887 (diff)
downloadbcm5719-llvm-ddcfbf7d0a550203b3d24e3c6026fc6c9ddf6a55.tar.gz
bcm5719-llvm-ddcfbf7d0a550203b3d24e3c6026fc6c9ddf6a55.zip
Have writeCOFFWriter return Expected<unique_ptr>.
Summary: Have writeCOFFWriter return Expected<unique_ptr> instead of requiring being passed an uninitialized unique_ptr. Reviewers: zturner, ruiu Subscribers: hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D34307 llvm-svn: 305730
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Object/WindowsResource.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/llvm/lib/Object/WindowsResource.cpp b/llvm/lib/Object/WindowsResource.cpp
index af836057ca3..9acc774647e 100644
--- a/llvm/lib/Object/WindowsResource.cpp
+++ b/llvm/lib/Object/WindowsResource.cpp
@@ -307,10 +307,9 @@ uint32_t WindowsResourceParser::TreeNode::getTreeSize() const {
class WindowsResourceCOFFWriter {
public:
- WindowsResourceCOFFWriter(std::unique_ptr<MemoryBuffer> &OutputBuffer,
- COFF::MachineTypes MachineType,
+ WindowsResourceCOFFWriter(COFF::MachineTypes MachineType,
const WindowsResourceParser &Parser, Error &E);
- Error write();
+ std::unique_ptr<MemoryBuffer> write();
private:
void performFileLayout();
@@ -326,7 +325,7 @@ private:
void writeDirectoryTree();
void writeDirectoryStringTable();
void writeFirstSectionRelocations();
- std::unique_ptr<MemoryBuffer> &OutputBuffer;
+ std::unique_ptr<MemoryBuffer> OutputBuffer;
char *BufferStart;
uint64_t CurrentOffset = 0;
COFF::MachineTypes MachineType;
@@ -346,11 +345,10 @@ private:
};
WindowsResourceCOFFWriter::WindowsResourceCOFFWriter(
- std::unique_ptr<MemoryBuffer> &OutputBuffer, COFF::MachineTypes MachineType,
- const WindowsResourceParser &Parser, Error &E)
- : OutputBuffer(OutputBuffer), MachineType(MachineType),
- Resources(Parser.getTree()), Data(Parser.getData()),
- StringTable(Parser.getStringTable()) {
+ COFF::MachineTypes MachineType, const WindowsResourceParser &Parser,
+ Error &E)
+ : MachineType(MachineType), Resources(Parser.getTree()),
+ Data(Parser.getData()), StringTable(Parser.getStringTable()) {
performFileLayout();
OutputBuffer = MemoryBuffer::getNewMemBuffer(FileSize);
@@ -417,7 +415,7 @@ static std::time_t getTime() {
return Now;
}
-Error WindowsResourceCOFFWriter::write() {
+std::unique_ptr<MemoryBuffer> WindowsResourceCOFFWriter::write() {
BufferStart = const_cast<char *>(OutputBuffer->getBufferStart());
writeCOFFHeader();
@@ -428,7 +426,7 @@ Error WindowsResourceCOFFWriter::write() {
writeSymbolTable();
writeStringTable();
- return Error::success();
+ return std::move(OutputBuffer);
}
void WindowsResourceCOFFWriter::writeCOFFHeader() {
@@ -716,13 +714,13 @@ void WindowsResourceCOFFWriter::writeFirstSectionRelocations() {
}
}
-Error writeWindowsResourceCOFF(std::unique_ptr<MemoryBuffer> &OutputBuffer,
- COFF::MachineTypes MachineType,
- const WindowsResourceParser &Parser) {
+Expected<std::unique_ptr<MemoryBuffer>>
+writeWindowsResourceCOFF(COFF::MachineTypes MachineType,
+ const WindowsResourceParser &Parser) {
Error E = Error::success();
- WindowsResourceCOFFWriter Writer(OutputBuffer, MachineType, Parser, E);
+ WindowsResourceCOFFWriter Writer(MachineType, Parser, E);
if (E)
- return E;
+ return std::move(E);
return Writer.write();
}
OpenPOWER on IntegriCloud