From 8269f37ce646675466e2892948f408b54a578d3e Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Wed, 7 Mar 2018 10:37:50 +0000 Subject: [PATCH] [WebAssembly] Use StringSaver to retain ownership of ctor function body. NFC Differential Revision: https://reviews.llvm.org/D44149 llvm-svn: 326885 --- lld/wasm/InputChunks.h | 11 ++++++----- lld/wasm/Writer.cpp | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lld/wasm/InputChunks.h b/lld/wasm/InputChunks.h index bff574b16831..1aadbe90d49f 100644 --- a/lld/wasm/InputChunks.h +++ b/lld/wasm/InputChunks.h @@ -24,7 +24,6 @@ #include "Config.h" #include "InputFiles.h" #include "lld/Common/ErrorHandler.h" -#include "lld/Common/Strings.h" #include "llvm/Object/Wasm.h" using llvm::object::WasmSegment; @@ -152,16 +151,18 @@ protected: class SyntheticFunction : public InputFunction { public: - SyntheticFunction(const WasmSignature &S, std::string Body, StringRef Name) - : InputFunction(S, nullptr, nullptr), Name(Name), Body(std::move(Body)) {} + SyntheticFunction(const WasmSignature &S, ArrayRef Body, + StringRef Name) + : InputFunction(S, nullptr, nullptr), Name(Name), Body(Body) {} StringRef getName() const override { return Name; } + StringRef getComdat() const override { return StringRef(); } protected: - ArrayRef data() const override { return toArrayRef(Body); } + ArrayRef data() const override { return Body; } StringRef Name; - std::string Body; + ArrayRef Body; }; } // namespace wasm diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index 550372aecde5..e263c97b116a 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -17,6 +17,7 @@ #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" @@ -873,7 +874,8 @@ void Writer::createCtorFunction() { const WasmSignature *Sig = WasmSym::CallCtors->getFunctionType(); SyntheticFunction *F = make( - *Sig, std::move(FunctionBody), WasmSym::CallCtors->getName()); + *Sig, toArrayRef(Saver.save(FunctionBody)), + WasmSym::CallCtors->getName()); F->setOutputIndex(FunctionIndex); F->Live = true; -- 2.34.1