Set IsUsedInRegularObj in a consistent manor between COFF, ELF and wasm. NFC
Differential Revision: https://reviews.llvm.org/D49147
llvm-svn: 338767
diff --git a/lld/wasm/SymbolTable.cpp b/lld/wasm/SymbolTable.cpp
index e1ba237..13a3c6f 100644
--- a/lld/wasm/SymbolTable.cpp
+++ b/lld/wasm/SymbolTable.cpp
@@ -88,14 +88,18 @@
return SymMap.lookup(CachedHashStringRef(Name));
}
-std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) {
+std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name, InputFile *File) {
+ bool Inserted = false;
Symbol *&Sym = SymMap[CachedHashStringRef(Name)];
- if (Sym)
- return {Sym, false};
- Sym = reinterpret_cast<Symbol *>(make<SymbolUnion>());
- Sym->IsUsedInRegularObj = false;
- SymVector.emplace_back(Sym);
- return {Sym, true};
+ if (!Sym) {
+ Sym = reinterpret_cast<Symbol *>(make<SymbolUnion>());
+ Sym->IsUsedInRegularObj = false;
+ SymVector.emplace_back(Sym);
+ Inserted = true;
+ }
+ if (!File || File->kind() == InputFile::ObjectKind)
+ Sym->IsUsedInRegularObj = true;
+ return {Sym, Inserted};
}
static void reportTypeError(const Symbol *Existing, const InputFile *File,
@@ -158,15 +162,15 @@
LLVM_DEBUG(dbgs() << "addSyntheticFunction: " << Name << "\n");
assert(!find(Name));
SyntheticFunctions.emplace_back(Function);
- return replaceSymbol<DefinedFunction>(insert(Name).first, Name, Flags,
- nullptr, Function);
+ return replaceSymbol<DefinedFunction>(insert(Name, nullptr).first, Name,
+ Flags, nullptr, Function);
}
DefinedData *SymbolTable::addSyntheticDataSymbol(StringRef Name,
uint32_t Flags) {
LLVM_DEBUG(dbgs() << "addSyntheticDataSymbol: " << Name << "\n");
assert(!find(Name));
- return replaceSymbol<DefinedData>(insert(Name).first, Name, Flags);
+ return replaceSymbol<DefinedData>(insert(Name, nullptr).first, Name, Flags);
}
DefinedGlobal *SymbolTable::addSyntheticGlobal(StringRef Name, uint32_t Flags,
@@ -175,8 +179,8 @@
<< "\n");
assert(!find(Name));
SyntheticGlobals.emplace_back(Global);
- return replaceSymbol<DefinedGlobal>(insert(Name).first, Name, Flags, nullptr,
- Global);
+ return replaceSymbol<DefinedGlobal>(insert(Name, nullptr).first, Name, Flags,
+ nullptr, Global);
}
static bool shouldReplace(const Symbol *Existing, InputFile *NewFile,
@@ -213,10 +217,7 @@
LLVM_DEBUG(dbgs() << "addDefinedFunction: " << Name << "\n");
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
-
- if (!File || File->kind() == InputFile::ObjectKind)
- S->IsUsedInRegularObj = true;
+ std::tie(S, WasInserted) = insert(Name, File);
if (WasInserted || S->isLazy()) {
replaceSymbol<DefinedFunction>(S, Name, Flags, File, Function);
@@ -238,10 +239,7 @@
<< "\n");
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
-
- if (!File || File->kind() == InputFile::ObjectKind)
- S->IsUsedInRegularObj = true;
+ std::tie(S, WasInserted) = insert(Name, File);
if (WasInserted || S->isLazy()) {
replaceSymbol<DefinedData>(S, Name, Flags, File, Segment, Address, Size);
@@ -258,12 +256,10 @@
Symbol *SymbolTable::addDefinedGlobal(StringRef Name, uint32_t Flags,
InputFile *File, InputGlobal *Global) {
LLVM_DEBUG(dbgs() << "addDefinedGlobal:" << Name << "\n");
+
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
-
- if (!File || File->kind() == InputFile::ObjectKind)
- S->IsUsedInRegularObj = true;
+ std::tie(S, WasInserted) = insert(Name, File);
if (WasInserted || S->isLazy()) {
replaceSymbol<DefinedGlobal>(S, Name, Flags, File, Global);
@@ -284,10 +280,7 @@
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
-
- if (!File || File->kind() == InputFile::ObjectKind)
- S->IsUsedInRegularObj = true;
+ std::tie(S, WasInserted) = insert(Name, File);
if (WasInserted)
replaceSymbol<UndefinedFunction>(S, Name, Flags, File, Sig);
@@ -305,10 +298,7 @@
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
-
- if (!File || File->kind() == InputFile::ObjectKind)
- S->IsUsedInRegularObj = true;
+ std::tie(S, WasInserted) = insert(Name, File);
if (WasInserted)
replaceSymbol<UndefinedData>(S, Name, Flags, File);
@@ -326,10 +316,7 @@
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
-
- if (!File || File->kind() == InputFile::ObjectKind)
- S->IsUsedInRegularObj = true;
+ std::tie(S, WasInserted) = insert(Name, File);
if (WasInserted)
replaceSymbol<UndefinedGlobal>(S, Name, Flags, File, Type);
@@ -346,7 +333,7 @@
Symbol *S;
bool WasInserted;
- std::tie(S, WasInserted) = insert(Name);
+ std::tie(S, WasInserted) = insert(Name, nullptr);
if (WasInserted) {
replaceSymbol<LazySymbol>(S, Name, File, *Sym);