[lld] r374332 - Make nullptr check more robust

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 10 05:41:08 PDT 2019


Author: ruiu
Date: Thu Oct 10 05:41:08 2019
New Revision: 374332

URL: http://llvm.org/viewvc/llvm-project?rev=374332&view=rev
Log:
Make nullptr check more robust

The only condition that isecLoc becomes null is

  Out::bufferStart == nullptr,
  isec->getParent()->offset == 0, and
  isec->outSecOff == 0.

We can check the first condition only once.

Modified:
    lld/trunk/ELF/Target.cpp

Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=374332&r1=374331&r2=374332&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Thu Oct 10 05:41:08 2019
@@ -91,18 +91,16 @@ TargetInfo *getTarget() {
 }
 
 template <class ELFT> static ErrorPlace getErrPlace(const uint8_t *loc) {
+  if (!Out::bufferStart)
+    return {};
+
   for (InputSectionBase *d : inputSections) {
     auto *isec = cast<InputSection>(d);
     if (!isec->getParent())
       continue;
 
     uint8_t *isecLoc = Out::bufferStart + isec->getParent()->offset + isec->outSecOff;
-    if (isecLoc > loc)
-      continue;
-    // isecLoc might be nullptr here, with isec->getSize() being non-zero.
-    // Adding these two together is not defined in C++.
-    if (loc < reinterpret_cast<uint8_t *>(
-                  reinterpret_cast<std::uintptr_t>(isecLoc) + isec->getSize()))
+    if (isecLoc <= loc && loc < isecLoc + isec->getSize())
       return {isec, isec->template getLocation<ELFT>(loc - isecLoc) + ": "};
   }
   return {};




More information about the llvm-commits mailing list