[ELF] Remove redundant isDefined() in Symbol::computeBinding() and delete one redunda...
authorFangrui Song <maskray@google.com>
Sun, 11 Aug 2019 17:03:00 +0000 (17:03 +0000)
committerFangrui Song <maskray@google.com>
Sun, 11 Aug 2019 17:03:00 +0000 (17:03 +0000)
After r367869, VER_NDX_LOCAL can only be assigned to Defined and
CommonSymbol.  CommonSymbol becomes Defined after replaceCommonSymbols(),
thus `versionId == VER_NDX_LOCAL` will imply `isDefined()`.

In maybeReportUndefined(), computeBinding() is called when the symbol is
unknown to be Undefined. computeBinding() != STB_LOCAL will always be
true.

llvm-svn: 368536

lld/ELF/Relocations.cpp
lld/ELF/Symbols.cpp

index 6dd1b4d..c3288ff 100644 (file)
@@ -770,8 +770,7 @@ static bool maybeReportUndefined(Symbol &sym, InputSectionBase &sec,
   if (!sym.isUndefined() || sym.isWeak())
     return false;
 
-  bool canBeExternal = !sym.isLocal() && sym.computeBinding() != STB_LOCAL &&
-                       sym.visibility == STV_DEFAULT;
+  bool canBeExternal = !sym.isLocal() && sym.visibility == STV_DEFAULT;
   if (config->unresolvedSymbols == UnresolvedPolicy::Ignore && canBeExternal)
     return false;
 
index 6652f48..84bc158 100644 (file)
@@ -276,9 +276,8 @@ MemoryBufferRef LazyArchive::getMemberBuffer() {
 uint8_t Symbol::computeBinding() const {
   if (config->relocatable)
     return binding;
-  if (visibility != STV_DEFAULT && visibility != STV_PROTECTED)
-    return STB_LOCAL;
-  if (versionId == VER_NDX_LOCAL && isDefined())
+  if ((visibility != STV_DEFAULT && visibility != STV_PROTECTED) ||
+      versionId == VER_NDX_LOCAL)
     return STB_LOCAL;
   if (!config->gnuUnique && binding == STB_GNU_UNIQUE)
     return STB_GLOBAL;