Simplify markLive().
authorRui Ueyama <ruiu@google.com>
Mon, 2 Jun 2014 08:06:57 +0000 (08:06 +0000)
committerRui Ueyama <ruiu@google.com>
Mon, 2 Jun 2014 08:06:57 +0000 (08:06 +0000)
Reference::target() never returns a nullptr, so NULL check
is not needed and is more harmful than doing nothing.
No functionality change.

llvm-svn: 210008

lld/include/lld/Core/Resolver.h
lld/lib/Core/Resolver.cpp

index 22af4e2..0bb1223 100644 (file)
@@ -67,7 +67,7 @@ private:
   void checkDylibSymbolCollisions();
   void forEachUndefines(bool searchForOverrides, UndefCallback callback);
 
-  void markLive(const Atom &atom);
+  void markLive(const Atom *atom);
   void addAtoms(const std::vector<const DefinedAtom *>&);
 
   class MergedFile : public MutableFile {
index 6ed3559..bf4b484 100644 (file)
@@ -305,17 +305,16 @@ void Resolver::updateReferences() {
 }
 
 // For dead code stripping, recursively mark atoms "live"
-void Resolver::markLive(const Atom &atom) {
+void Resolver::markLive(const Atom *atom) {
   // Mark the atom is live. If it's already marked live, then stop recursion.
-  auto exists = _liveAtoms.insert(&atom);
+  auto exists = _liveAtoms.insert(atom);
   if (!exists.second)
     return;
 
   // Mark all atoms it references as live
-  if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(&atom))
+  if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(atom))
     for (const Reference *ref : *defAtom)
-      if (const Atom *target = ref->target())
-        markLive(*target);
+      markLive(ref->target());
 }
 
 // remove all atoms not actually used
@@ -342,7 +341,7 @@ void Resolver::deadStripOptimize() {
 
   // mark all roots as live, and recursively all atoms they reference
   for (const Atom *dsrAtom : _deadStripRoots)
-    markLive(*dsrAtom);
+    markLive(dsrAtom);
 
   // now remove all non-live atoms from _atoms
   _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(), [&](const Atom *a) {