Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lld/COFF/SymbolTable.cpp')
-rw-r--r--lld/COFF/SymbolTable.cpp17
1 files changed, 5 insertions, 12 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index ca4c6fa835bf..53e4ee8c88f0 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -141,8 +141,10 @@ bool SymbolTable::reportRemainingUndefines() {
// If we can resolve a symbol by removing __imp_ prefix, do that.
// This odd rule is for compatibility with MSVC linker.
if (Name.startswith("__imp_")) {
- if (Defined *Imp = find(Name.substr(strlen("__imp_")))) {
- auto *S = new (Alloc) DefinedLocalImport(Name, Imp);
+ Symbol *Imp = find(Name.substr(strlen("__imp_")));
+ if (Imp && isa<Defined>(Imp->Body)) {
+ auto *D = cast<Defined>(Imp->Body);
+ auto *S = new (Alloc) DefinedLocalImport(Name, D);
LocalImportChunks.push_back(S->getChunk());
Sym->Body = S;
continue;
@@ -241,16 +243,7 @@ std::vector<Chunk *> SymbolTable::getChunks() {
return Res;
}
-Defined *SymbolTable::find(StringRef Name) {
- auto It = Symtab.find(Name);
- if (It == Symtab.end())
- return nullptr;
- if (auto *Def = dyn_cast<Defined>(It->second->Body))
- return Def;
- return nullptr;
-}
-
-Symbol *SymbolTable::findSymbol(StringRef Name) {
+Symbol *SymbolTable::find(StringRef Name) {
auto It = Symtab.find(Name);
if (It == Symtab.end())
return nullptr;