Avoid undefined behavior when vector is empty.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 Dec 2015 16:35:06 +0000 (16:35 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 Dec 2015 16:35:06 +0000 (16:35 +0000)
Found by ubsan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255258 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/SetVector.h
lib/Linker/LinkModules.cpp

index 3ab202d8d71c6448276181357f1ffc0784ec64a9..bc563570c203021076074090e17c79d5b412a182 100644 (file)
@@ -58,6 +58,8 @@ public:
     insert(Start, End);
   }
 
+  ArrayRef<T> getArrayRef() const { return vector_; }
+
   /// \brief Determine if the SetVector is empty or not.
   bool empty() const {
     return vector_.empty();
index 3d3454f3f7fdcc8fabb143415dd4a22e0a5266f9..a596697e8f516994c5ba56b182454421b744809e 100644 (file)
@@ -772,8 +772,7 @@ bool ModuleLinker::run() {
       Internalize.insert(GV->getName());
   }
 
-  if (Mover.move(SrcM,
-                 makeArrayRef(&*ValuesToLink.begin(), ValuesToLink.size()),
+  if (Mover.move(SrcM, ValuesToLink.getArrayRef(),
                  [this](GlobalValue &GV, IRMover::ValueAdder Add) {
                    addLazyFor(GV, Add);
                  }))