Index: lld/trunk/wasm/InputChunks.h =================================================================== --- lld/trunk/wasm/InputChunks.h +++ lld/trunk/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 @@ 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 Index: lld/trunk/wasm/Writer.cpp =================================================================== --- lld/trunk/wasm/Writer.cpp +++ lld/trunk/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 @@ 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;