diff options
Diffstat (limited to 'lld/wasm/Symbols.h')
-rw-r--r-- | lld/wasm/Symbols.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lld/wasm/Symbols.h b/lld/wasm/Symbols.h index 8556d32bcf8..b2ec1e8c66e 100644 --- a/lld/wasm/Symbols.h +++ b/lld/wasm/Symbols.h @@ -91,10 +91,13 @@ public: WasmSymbolType getWasmType() const; + // True if this symbol was referenced by a regular (non-bitcode) object. + unsigned IsUsedInRegularObj : 1; + protected: Symbol(StringRef Name, Kind K, uint32_t Flags, InputFile *F) - : Name(Name), SymbolKind(K), Flags(Flags), File(F), - Referenced(!Config->GcSections) {} + : IsUsedInRegularObj(false), Name(Name), SymbolKind(K), Flags(Flags), + File(F), Referenced(!Config->GcSections) {} StringRef Name; Kind SymbolKind; @@ -332,7 +335,12 @@ T *replaceSymbol(Symbol *S, ArgT &&... Arg) { "SymbolUnion not aligned enough"); assert(static_cast<Symbol *>(static_cast<T *>(nullptr)) == nullptr && "Not a Symbol"); - return new (S) T(std::forward<ArgT>(Arg)...); + + Symbol SymCopy = *S; + + T *S2 = new (S) T(std::forward<ArgT>(Arg)...); + S2->IsUsedInRegularObj = SymCopy.IsUsedInRegularObj; + return S2; } } // namespace wasm |