[WebAssembly] Pass ownership of body to SyntheticFunction. NFC
This avoids the Writer unnecessarily having a member to retain ownership
of the function body.
Differential Revision: https://reviews.llvm.org/D43933
llvm-svn: 326580
diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp
index dad2c5f..1b7cde1 100644
--- a/lld/wasm/Writer.cpp
+++ b/lld/wasm/Writer.cpp
@@ -17,7 +17,6 @@
#include "WriterUtils.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/Memory.h"
-#include "lld/Common/Strings.h"
#include "lld/Common/Threads.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/BinaryFormat/Wasm.h"
@@ -137,7 +136,6 @@
std::vector<OutputSection *> OutputSections;
std::unique_ptr<FileOutputBuffer> Buffer;
- std::string CtorFunctionBody;
std::vector<OutputSegment *> Segments;
llvm::SmallDenseMap<StringRef, OutputSegment *> SegmentMap;
@@ -859,10 +857,10 @@
uint32_t FunctionIndex = NumImportedFunctions + InputFunctions.size();
WasmSym::CallCtors->setOutputIndex(FunctionIndex);
- // First write the body bytes to a string.
- std::string FunctionBody;
+ // First write the body's contents to a string.
+ std::string BodyContent;
{
- raw_string_ostream OS(FunctionBody);
+ raw_string_ostream OS(BodyContent);
writeUleb128(OS, 0, "num locals");
for (const WasmInitEntry &F : InitFunctions) {
writeU8(OS, OPCODE_CALL, "CALL");
@@ -872,14 +870,16 @@
}
// Once we know the size of the body we can create the final function body
- raw_string_ostream OS(CtorFunctionBody);
- writeUleb128(OS, FunctionBody.size(), "function size");
- OS.flush();
- CtorFunctionBody += FunctionBody;
+ std::string FunctionBody;
+ {
+ raw_string_ostream OS(FunctionBody);
+ writeUleb128(OS, BodyContent.size(), "function size");
+ OS << BodyContent;
+ }
const WasmSignature *Sig = WasmSym::CallCtors->getFunctionType();
SyntheticFunction *F = make<SyntheticFunction>(
- *Sig, toArrayRef(CtorFunctionBody), WasmSym::CallCtors->getName());
+ *Sig, std::move(FunctionBody), WasmSym::CallCtors->getName());
F->setOutputIndex(FunctionIndex);
F->Live = true;